home *** CD-ROM | disk | FTP | other *** search
/ RComp HTML Edit Studio for RISC OS / RComp HTML Edit Studio for RISC OS.iso / ZIPS / WDT.ZIP / HTMLEdit / Toolkit / !WebThumbs / bin / CFSI32 (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  2003-03-31  |  167.9 KB  |  7,556 lines

  1.  > ChangeFSI 1.19rc Iyonix
  2.  modified as follows at 31-03-2003
  3.  by NtH, according modifications to 1.15 --> 1.15rc
  4.  altered  x%=sx%*xmul%/xdiv%+.9999:y%=sy%*ymul%/ydiv%+.9999:rows%=sy%
  5.  to  x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
  6.  This helps remove the ugly black border when thumbnailing.
  7.  altered END=&4000000 to &800000 to ensure only 8M is used by djpeg.
  8.  also added the -maxmemory 512 option to djpeg to ensure not too
  9.  much memory is used up.
  10.  NTH: changed to -maxmem 2048
  11.  Altered the A$ input variable to GS_Trans it so if system variables are
  12.  use in the input line they are correctly evaluted; added FNgetstring(ptr%)
  13.  buffer% 512
  14. areanumber%=0
  15. "OS_GetEnv" 
  16.  "OS_GSTrans",A$,buffer%,512
  17. getstring(buffer%)
  18.  PRINT A$
  19. task%=
  20. A$," -wimp")
  21.  task% 
  22.  z%(1),p%(3),s%(3),m$(30)
  23. "<ChangeFSI$Dir>.Messages"
  24. )B%=-1:
  25.  B%+=1:m$(B%)=
  26. startfile%=
  27. A$,6)<>"-wimp "
  28.  taskid%4:$taskid%="TASK"
  29.  "Wimp_Initialise",200,!taskid%,m$(20) 
  30.  version%
  31.  version%>=350 
  32. "XOS_Memory",8+(2<<8) 
  33.  ,r1,r2;F%:
  34. 1 vramsize%=0 
  35.  vramsize%=r1*r2
  36.  vramsize%>0 vram%=
  37.  vram%=
  38. vram%=
  39. Wimp    = (1<<18) + (3<<6)
  40. %%CreateW = Wimp+1:OpenW   = Wimp+5
  41. &%CloseW  = Wimp+6:RedrawW = Wimp+8
  42. '&UpdateW = Wimp+9:GetR%   = Wimp+10
  43. (&GetW    = Wimp+11:SetI   = Wimp+13
  44. )&GetI    = Wimp+14:GetP   = Wimp+15
  45. *&Drag    = Wimp+16:CrMenu = Wimp+20
  46. DcMenu  = Wimp+21
  47.  "OS_SWINumberFromString",,"Wimp_PollIdle" 
  48.  Poll%
  49.  "OS_SWINumberFromString",,"XOS_SpriteOp" 
  50.  spopx%
  51.  "OS_SWINumberFromString",,"OS_SpriteOp" 
  52.  spop%
  53.  "OS_SWINumberFromString",,"OS_ReadMonotonicTime" 
  54.  Time%
  55.  "OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber" 
  56.  ctran%
  57.  "OS_SWINumberFromString",,"Wimp_SetCaretPosition" 
  58.  Caretpos%
  59.  "OS_SWINumberFromString",,"Wimp_GetCaretPosition" 
  60.  Getcaret%
  61.  "XOS_SWINumberFromString",,"DragASprite_Start" 
  62.  dstart%;f%:
  63.  1 dstart%=0
  64.  "XOS_SWINumberFromString",,"JPEG_PlotScaled" 
  65.  jpegpaint%;f%:
  66.  1 jpegpaint%=0
  67.  "OS_Byte",161,&1C 
  68.  ,,f%:
  69.  2)=0 dstart%=0
  70. nextlocation%=
  71.  "Wimp_SlotSize",-1,-1 
  72.  originalslot%
  73. locale_initialise
  74.  version%>=300 
  75.  q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023
  76.  z% 1699,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2399
  77. eidata%=idata%+2400
  78. ?2scrap%=
  79. :sprite%=
  80. :sar%=
  81. :saved%=
  82.  "OS_Byte",161,&8C 
  83.  ,,f%
  84. "Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Template3d"
  85. "Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates"
  86. "Wimp_CloseTemplate":
  87. $+" (code "+
  88.  version%>=300 
  89. largest_buffer
  90. J#indsize%=
  91. size_indirect("Info")
  92.  info_wind% indsize%
  93. "Wimp_LoadTemplate",,z%,info_wind%,info_wind%+indsize%,-1,"Info"+z$,0
  94. "Wimp_LoadTemplate",,z%,idata%,eidata%,-1,"Info"+z$,0 
  95.  ,,idata%
  96.  CreateW,,z% 
  97.  infow%:$!(z%+88+7*32+20)=m$(21)
  98. dotemplate("Processing"):
  99.  CreateW,,z% 
  100.  proc%
  101. Rap%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20):p%(3)=!(z%+88+12*32+20)
  102. dotemplate("Output")
  103.  CreateW,,z% 
  104.  output%:admode%=!(z%+88+20*32+20):adspcl%=!(z%+88+19*32+20):oldmode%=!(z%+88+34*32+20)
  105. dotemplate("Scaling"):
  106.  CreateW,,z% 
  107.  scalew%:adscale%=!(z%+88+1*32+20)
  108. Vcs%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20):s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20)
  109. dotemplate("Save")
  110.  CreateW,,z% 
  111.  save%:adsave%=!(z%+88+1*32+20):adsavesprite%=!(z%+88+0*32+20)
  112. dotemplate("Sprite")
  113.  CreateW,,z% 
  114.  sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20)
  115. [Hadsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20)
  116. dotemplate("Source"):
  117.  CreateW,,z% 
  118.  srcinfo%:adsrc%=!(z%+88+0*32+20)
  119. dotemplate("Range"):
  120.  CreateW,,z% 
  121.  raninfo%:adran%=!(z%+88+0*32+20)
  122. dotemplate("Zoom")
  123.  CreateW,,z% 
  124.  zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20)
  125. dotemplate("JPEGOutput"):
  126.  CreateW,,z% 
  127.  jpego%:adjpegq%=!(z%+88+5*32+20)
  128. dotemplate("Pic"):
  129.  CreateW,,z% 
  130.  pic%:adtitle%=z%!72
  131. "Wimp_CloseTemplate"
  132. d@!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010
  133. e:$(q%+24)="!"+m$(20):
  134. "Wimp_CreateIcon",,q% 
  135.  iconbar%
  136. f4A%=
  137. "<Choices$Write>.ChangeFSI.Choices":
  138.  A%=0 
  139. g]fast%=
  140. :dest%=1:statescale%=%10000000100:stateproc%=0:stateoutput%=&4052008:statejpeg%=&2
  141. hN$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$p%(3)="4":$adspcl%=""
  142. i=$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4"
  143. $adjpegq%="75":$oldmode%=""
  144. #A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
  145. #A%,$p%(0),$p%(1),$p%(2),$p%(3),$admode%,$adspcl%
  146. n5$p%(1)=
  147. locale_convert($p%(1),".",decimal_point$)
  148. #A%,$s%(0),$s%(1),$s%(2),$s%(3)
  149. q%!12=1<<21
  150. s@!q%=scalew%:
  151.  I%=0
  152.  statescale%>>I%
  153. 1 q%!8=1<<21 
  154.  q%!8=0
  155. q%!4=I%:
  156.  SetI,,q%:
  157.  I%=10
  158.  statescale%>>I%
  159. 1 q%!8=1<<21 
  160.  q%!8=0
  161. q%!4=I%+6:
  162.  SetI,,q%:
  163. w=!q%=proc%:
  164.  I%=0
  165.  stateproc%>>I%
  166. 1 q%!8=1<<21 
  167.  q%!8=0
  168. q%!4=I%:
  169.  SetI,,q%:
  170. yB!q%=output%:
  171.  I%=0
  172.  stateoutput%>>I%
  173. 1 q%!8=1<<21 
  174.  q%!8=0
  175. q%!4=I%:
  176.  SetI,,q%:
  177. {>!q%=jpego%:
  178.  I%=0
  179.  statejpeg%>>I%
  180. 1 q%!8=1<<21 
  181.  q%!8=0
  182. q%!4=I%:
  183.  SetI,,q%:
  184.  stateoutput%>>17
  185. 1 q%!8=1<<22 
  186.  q%!8=0
  187. ~i!q%=output%:q%!12=1<<22:q%!4=7:
  188.  SetI,,q%:q%!4=8:
  189.  SetI,,q%:q%!4=13:
  190.  SetI,,q%:q%!4=14:
  191.  SetI,,q%
  192. showscaletofit:$z%(0)="1":$z%(1)="1"
  193.  "OS_UpdateMEMC" 
  194.  oldmemc
  195. jpegsave%=
  196. "OS_UpdateMEMC",oldmemc,&700:
  197. errorbox:
  198.  CrMenu,,-1 
  199.  Drag,,-1
  200. sprite% 
  201.  "Wimp_SlotSize",originalslot%,-1
  202. CF$="":
  203.  startfile% startfile%=
  204. A$,"-wimp")+6):
  205. callFSI
  206.  Poll%,1,q% 
  207.  sprite% 
  208. redraw_window(!q%)
  209. open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
  210.  &400c3,,q%:nextlocation%=
  211. removearea
  212.  "Wimp_SlotSize",originalslot%,-1:saved%=
  213. :sprite%=
  214. checkmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
  215.  GetP,,q%:dw%=q%!12:di%=q%!16:
  216.  dstart% 
  217. "DragASprite_Stop"
  218. <q%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4
  219. q%!36=!sar%+3:
  220.  jpegsave% 
  221. q%!40=&c85
  222. q%!40=&ff9
  223. /temp$=
  224. ZS(adsave%):foo%=
  225. temp$,"."):
  226.  foo%
  227. )temp$=
  228. temp$,foo%+1):foo%=
  229. temp$,".")
  230. -$(q%+44)=temp$+
  231. 0:!q%=44+(
  232.  temp$+1+3
  233.  "Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8
  234. key(!q%,q%!4,q%!24)
  235. menuselect(q%)
  236.  17,18:
  237. receive(q%)
  238. =&800000
  239. "Set ChangeFSI$ReturnCode "+
  240. $+" (code "+
  241. +")":
  242. removearea:
  243. 1foo%=0:A%=
  244. ChangeFSI(A$,-1,-1,0,-1,-1,foo%,
  245. removearea:*unset ChangeFSI$ReturnCode
  246. dotemplate(a$)
  247.  version%>300 
  248. "Wimp_LoadTemplate",,0,,,,a$+z$,0 
  249.  ,,indsize%
  250.  A% indsize%
  251. "Wimp_LoadTemplate",,z%,A%,A%+indsize%,-1,a$+z$,0
  252. "Wimp_LoadTemplate",,z%,idata%,eidata%,-1,a$+z$,0 
  253.  ,,idata%
  254. locale_initialise
  255.  decimal_point$=".":
  256.  "Territory_ReadSymbols",-1,0 
  257. decimal_point$=
  258. locale_convert(n$,f$,t$)
  259.  f$=t$ 
  260. n$,f$)
  261.  i%<>0 :=
  262. n$,i%-1)+t$+
  263. n$,i%+1)
  264. size_indirect(name$)
  265.  size%
  266.  "Wimp_LoadTemplate",,0,,,,name$+z$,0 
  267.  ,,size%
  268. =size%
  269. largest_buffer
  270.  largest_tem%,size%,here%,name
  271.  name 12
  272. $$name="*":here%=0:largest_tem%=0
  273.  "Wimp_LoadTemplate", ,0,,,,name,0 
  274.  ,size%,,,,,here%
  275.  here%
  276.  largest_tem%<size% largest_tem%=size%
  277. $name= "*"
  278.  "Wimp_LoadTemplate", ,0,,,,name,here% 
  279.  ,size%,,,,,here%
  280. =largest_tem%
  281. receive(q%)
  282.  q%!16 
  283. removearea:
  284.  "Wimp_CloseDown":
  285.  q%!20<>save% 
  286. A!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap>"+
  287. "Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8
  288.  jpegsave% 
  289. "OS_File",10,
  290. ZS(q%+44),&c85,,sar%,sar%+jpegsize%
  291.  spop%,&10C,sar%,
  292. ZS(q%+44)
  293. $adsave%=
  294. ZS(q%+44)
  295. 7q%!12=q%!8:q%!16=3:
  296.  "Wimp_SendMessage",18,q%,q%!4
  297.  q%!36<>-1 saved%=
  298.  CrMenu,,-1
  299.  3:F$=
  300. ZS(q%+44):
  301.  scrap% scrap%=scrap%=q%!12
  302. 6q%!12=q%!8:q%!16=4:
  303. "Wimp_SendMessage",17,q%,q%!4
  304. callFSI
  305.  q%!40 
  306.  &ff0,&c85
  307. 6q%!12=q%!8:q%!16=4:
  308. "Wimp_SendMessage",17,q%,q%!4
  309. ZS(q%+44):
  310. callFSI
  311. checksaved(q%)
  312. 9,&400C1:
  313.  sprite% 
  314. getmodeinfo:
  315. &400d1,pic%,0,-32767,32767,0
  316. showscaletofit
  317. "XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 
  318. ,,bootlen%
  319. paltemp%?bootlen%=13
  320. #q%!20,"Run "+$paltemp%
  321. callFSI
  322. checkvalues <> 0 
  323. deducemode:A%=47
  324. jpegsave%=
  325.  dest%=0 
  326. Ajpegsave%=
  327. :A$="JPEG":
  328. geticonstate(jpego%,2) A$="JPEGMONO"
  329. A$+=$adjpegq%
  330. geticonstate(output%,15) 
  331. A$+=$adspcl%
  332. geticonstate(output%,16) 
  333. geticonstate(output%,5)
  334. geticonstate(output%,11) A$+="R"
  335.  A$,3 
  336.  A%=63 
  337. geticonstate(output%,6) A$="27t"
  338. geticonstate(output%,12) A$="12t"
  339.  A%=255 A$+="d"
  340. /A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$
  341. ChangeFSISuffix
  342. %info$="":range$=m$(19):cputime%=0
  343.  sprite% !q%=pic%:
  344.  &400c3,,q%:saved%=
  345. :sprite%=
  346. nextlocation%=
  347.  "Wimp_SlotSize",originalslot%,-1:
  348. removearea
  349.  fast% 
  350.  "OS_UpdateMEMC",&300,&700 
  351.  oldmemc
  352. ChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0)
  353.  fast% 
  354.  "OS_UpdateMEMC",oldmemc,&700
  355.  scrap% scrap%=
  356. "OS_File",6,F$
  357.  A%<2 
  358.  sar%<>0 
  359. -$adsx%=
  360.  xsp%:$adsy%=
  361.  ysp%:
  362.  jpegsave% 
  363. "$adsm%="JPEG":$adsname%="JPEG"
  364. $adsbytes%=
  365.  jpegsize%
  366. x=xsp%*2:y=ysp%*2
  367. &35,-1,4 
  368. ,,nx:
  369. &35,-1,5 
  370. =!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
  371. $adsavesprite%="file_c85"
  372. F$,7)="<Wimp$S" F$="JPEGImage"
  373.  spopx%,&10d,sar%,pixtrans%,255,1
  374. ZS(pixtrans%):
  375.  spopx%,&128,sar%,n$ 
  376. ,,,x,y,,m
  377. $adsm%=
  378.  m:$adsname%=n$
  379. $adsbytes%=
  380.  sar%!12
  381. &35,m,4 
  382. ,,nx:x=x<<nx
  383. &35,m,5 
  384. ,,ny:y=y<<ny:
  385. getmodeinfo
  386. $adsavesprite%="file_ff9"
  387. F$,7)="<Wimp$S" F$="SpriteFile"
  388. "/!q%=save%:q%!4=0:q%!8=0:q%!12=0:
  389.  SetI,,q%
  390. #c$adran%=range$:$adsrc%=info$+m$(0)+
  391. (cputime%
  392. 100)+decimal_point$+
  393. (cputime%
  394. 100),2)+m$(1)
  395. saved%=
  396. :sprite%=
  397. %)A%=
  398. "."+F$,A%,1)<>".":A%-=1:
  399. $adsave%=
  400. "."+F$,A%+1)
  401. pic%=
  402. create_window(x,y,F$)
  403. popup(pic%,-1)
  404. checkvalues
  405.  e,error$,flag%
  406.  dest%=0 
  407. ($adjpegq%) > 100 
  408. .    e = 1
  409. /6error$ = m$(22) + m$(25) + m$(23) + m$(27) +m$(24)
  410. $admode%,1) < "A" 
  411.  dest%=1 
  412.  &35, 
  413. ($admode%), 0 
  414.  ;flag%
  415. ($admode%) = 0 flag%=2
  416. ($admode%) > 127 
  417. ($admode%) < 256 flag%=2
  418.  (flag% 
  419.  2) > 0 
  420. 6    e = 2
  421. 76error$ = m$(22) + m$(26) + m$(23) + m$(13) +m$(24)
  422.  e <> 0 
  423.  Drag,,-1
  424. <%!buffer%=e:$(buffer%+4)=error$+
  425.  "Wimp_ReportError",buffer%,%01,m$(20) 
  426.  A%=2 
  427. removearea:
  428.  "Wimp_CloseDown":
  429. ChangeFSISuffix
  430. safe%=
  431. geticonstate(scalew%,1) A$+=" "+
  432.  tofitx+": "+
  433.  tofity+":":safe%=
  434. geticonstate(scalew%,5) A$+=" 1:2":safe%=
  435. geticonstate(scalew%,4) A$+=" 1:2 1:1":safe%=
  436. geticonstate(scalew%,3) A$+=" 1:1 1:2":safe%=
  437. geticonstate(scalew%,9) 
  438. safe%=
  439. $s%(0) A$+=" "+$s%(0) 
  440.  A$+=" 1"
  441. A$+=":"+$s%(1)
  442. $s%(2) A$+=" "+$s%(2) 
  443.  A$+=" 1"
  444. A$+=":"+$s%(3)
  445. geticonstate(scalew%,0) A$+=" -nosize"
  446. geticonstate(scalew%,18) A$+=" -noscale"
  447. geticonstate(scalew%,19) A$+=" -lock"
  448. geticonstate(scalew%,6) 
  449. RHsafe%=
  450. geticonstate(scalew%,16) A$+=" -rotate" 
  451.  A$+=" -rotate-"
  452. geticonstate(scalew%,7) A$+=" -hflip":safe%=
  453. geticonstate(scalew%,8) A$+=" -vflip":safe%=
  454. geticonstate(proc%,0) A$+=" -range":safe%=
  455. geticonstate(proc%,1) A$+=" -equal":safe%=
  456. geticonstate(proc%,2) A$+=" -nodither"
  457. geticonstate(proc%,3) A$+=" -invert":safe%=
  458. geticonstate(proc%,4) A$+=" -brighten"
  459. geticonstate(proc%,5) A$+=" -black"+$p%(0)
  460. geticonstate(proc%,6) A$+=" -gamma"+
  461. locale_convert($p%(1),decimal_point$,"."):safe%=
  462. geticonstate(proc%,7) A$+=" -sharpen"+$p%(2):safe%=
  463. geticonstate(proc%,11) A$+=" -smooth"+$p%(3)
  464. checkandfinish
  465.  saved% 
  466. sprite% 
  467. removearea:
  468.  "Wimp_CloseDown":
  469. b-!buffer%=
  470. :$(buffer%+4)=m$(2)+F$+m$(3)+
  471. "Wimp_ReportError",buffer%,%010100000000,m$(20),"!changefsi",1,m$(30) 
  472.  A%=4 
  473. removearea:
  474.  "Wimp_CloseDown":
  475. checksaved(q%)
  476.  saved% 
  477. sprite% 
  478. h-!buffer%=
  479. :$(buffer%+4)=m$(2)+F$+m$(3)+
  480. "Wimp_ReportError",buffer%,%010100000000,m$(20),"!changefsi",1,m$(30) 
  481. q%!12=q%!8
  482.  A%<>4 
  483.  "Wimp_SendMessage" ,19, q%, 0
  484. key(handle%,icon%,key%)
  485.  key%=&1b 
  486.  CrMenu,,-1:
  487.  handle% 
  488.  zoom%:
  489.  key% 
  490. dozoom(icon%-4,0):
  491.  icon%=4 
  492.  &400d2,zoom%,5,,,-1,
  493. $z%(0)
  494.  icon%=5 
  495.  CrMenu,,-1
  496.  &18e,&18f:
  497. dozoom(icon%-4,0)
  498.  &400d2,zoom%,icon%
  499. 1,,,-1,
  500. $z%(icon%
  501.  save%
  502.  key%=13 
  503. savesprite:
  504.  output%
  505.  icon%=34 
  506. geticonstate(output%, 24) 
  507. $admode% = $oldmode%:!q%=output%:q%!4=20:q%!8=0:q%!12=0:
  508.  SetI,,q%
  509. showscaletofit
  510.  key%=13 
  511.  CrMenu,,-1:
  512.  key%=&18e 
  513.  icon% 
  514.  19:icon%=34:key%=oldmode%
  515.  34:icon%=22:key%=adjpegq%
  516.  22:icon%=19:key%=adspcl%
  517.  key%=&18f 
  518.  icon% 
  519.  22:icon%=34:key%=oldmode%
  520.  34:icon%=19:key%=adspcl%
  521.  19:icon%=22:key%=adjpegq%
  522.  key%>1024 
  523.  &400d2,output%,icon%,,,-1,
  524. $key%:
  525.  proc%:
  526.  key% 
  527.  &18e,13:icon%+=1:
  528.  icon%>10 icon%=8:
  529.  key%=13 
  530.  CrMenu,,-1:
  531.  &400d2,proc%,icon%,,,-1,
  532. $p%(icon%-8):
  533.  &18f:icon%-=1:
  534.  icon%<8 icon%=10
  535.  &400d2,proc%,icon%,,,-1,
  536. $p%(icon%-8):
  537.  scalew%:
  538.  key% 
  539.  &18e,13:icon%+=1:
  540.  icon%>13 icon%=10:
  541.  key%=13 
  542.  CrMenu,,-1:
  543.  &400d2,scalew%,icon%,,,-1,
  544. $s%(icon%-10):
  545.  &18f:icon%-=1:
  546.  icon%<10 icon%=13
  547.  &400d2,scalew%,icon%,,,-1,
  548. $s%(icon%-10):
  549.  "Wimp_ProcessKey",key%
  550. savesprite
  551.  F$ = $adsave% 
  552.  Drag,,-1
  553. %!buffer%=3:$(buffer%+4)=m$(28)+
  554.  "Wimp_ReportError",buffer%,%11,m$(20) 
  555.  A%=2 
  556.  CrMenu,,-1
  557.  jpegsave% 
  558. "OS_File",10,$adsave%,&c85,,sar%,sar%+jpegsize%
  559.  spop%,&10C,sar%,$adsave%
  560.  CrMenu,,-1
  561. checkmouse(mousex%,mousey%,b%,handle%,icon%,ob%)
  562.  moved%:moved%=
  563.  handle% 
  564.  pic%:
  565. domenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20))
  566. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
  567. rmenuhandle%=handle%
  568.  handle% 
  569.  zoom%:
  570.  icon% 
  571. dozoom(0,1)
  572. dozoom(0,-1)
  573. dozoom(1,1)
  574. dozoom(1,-1)
  575.  handle% 
  576.  zoom%:
  577.  icon% 
  578. dozoom(0,-1)
  579. dozoom(0,1)
  580. dozoom(1,-1)
  581. dozoom(1,1)
  582.  handle% 
  583.  output%:
  584.  dest%=0 dest%=1:
  585. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)):
  586.  Getcaret%,,q%:moved%=
  587.  icon% 
  588.  3,4,5,6:
  589. killcurrent(
  590. (22+icon%)):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  591.  SetI,,q%:q%!4=24:
  592.  SetI,,q%
  593. killcurrent("S16,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  594.  SetI,,q%:q%!4=24:
  595.  SetI,,q%
  596. killcurrent("S32,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  597.  SetI,,q%:q%!4=24:
  598.  SetI,,q%
  599. killcurrent("0"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  600.  SetI,,q%:q%!4=24:
  601.  SetI,,q%
  602. killcurrent("8"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  603.  SetI,,q%:q%!4=24:
  604.  SetI,,q%
  605. killcurrent("12"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  606.  SetI,,q%:q%!4=24:
  607.  SetI,,q%
  608. killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  609.  SetI,,q%:q%!4=24:
  610.  SetI,,q%
  611. killcurrent("S16,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  612.  SetI,,q%:q%!4=24:
  613.  SetI,,q%
  614. killcurrent("S32,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  615.  SetI,,q%:q%!4=24:
  616.  SetI,,q%
  617. killcurrent(
  618. deducemode):
  619.  SetI,,q%:
  620.  Caretpos%,output%,19,,,-1,
  621. ($adspcl%):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
  622.  SetI,,q%:q%!4=8:
  623.  SetI,,q%:q%!4=13:
  624.  SetI,,q%:q%!4=14:
  625.  SetI,,q%
  626. killcurrent(
  627. deducemode):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
  628.  SetI,,q%:q%!4=8:
  629.  SetI,,q%:q%!4=13:
  630.  SetI,,q%:q%!4=14:
  631.  SetI,,q%
  632. killcurrent(
  633. deducemode):!q%=output%:q%!4=7:q%!8=1<<22:q%!12=1<<22:
  634.  SetI,,q%:q%!4=8:
  635.  SetI,,q%:q%!4=13:
  636.  SetI,,q%:q%!4=14:
  637.  SetI,,q%
  638. $admode%,1) = "S" 
  639. $admode%,2) = "45" 
  640. killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  641.  SetI,,q%:q%!4=24:
  642.  SetI,,q%
  643. killcurrent("28"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  644.  SetI,,q%:q%!4=24:
  645.  SetI,,q%
  646.  18:!q%=output%:q%!4=24:q%!8=0:q%!12=1<<21:
  647.  SetI,,q%
  648.  24:!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  649.  SetI,,q%:
  650. killcurrent(
  651. deducemode):
  652.  Caretpos%,output%,34,,,-1,
  653. ($oldmode%)
  654.  moved% 
  655.  Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
  656.  moved% 
  657.  Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
  658. geticonstate(output%,18) $admode%=
  659. deducemode
  660. 2!q%=output%:q%!4=20:q%!8=0:q%!12=0:
  661.  SetI,,q%
  662. showscaletofit
  663.  save%:
  664.  icon% 
  665. savesprite
  666.  sprite% 
  667. getw(pic%):
  668. open_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1)
  669.  jpego%:
  670.  dest%=1 
  671.  Getcaret%,,q%
  672. dest%=0:
  673. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
  674.  icon%=5 
  675.  Caretpos%,jpego%,q%!4,q%!8,q%!12,q%!16,q%!20
  676.  icon% 
  677. 4 $adjpegq% = 
  678. ($adjpegq%)-1) 
  679. $adjpegq% = 
  680. ($adjpegq%)+1)
  681. ($adjpegq%)<0 $adjpegq%="0"
  682. ($adjpegq%)>100 $adjpegq%="100"
  683. 0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
  684.  SetI,,q%
  685.  Caretpos%,jpego%,5,,,-1,
  686. ($adjpegq%)
  687. 4 $adjpegq% = 
  688. ($adjpegq%)+1) 
  689. $adjpegq% = 
  690. ($adjpegq%)-1)
  691. ($adjpegq%)<0 $adjpegq%="0"
  692. ($adjpegq%)>100 $adjpegq%="100"
  693. 0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
  694.  SetI,,q%
  695.  Caretpos%,jpego%,5,,,-1,
  696. ($adjpegq%)
  697.  handle% 
  698.  save%:
  699.  icon% 
  700. getw(save%)
  701.  !q%=save%:q%!4=0:
  702.  GetI,,q%
  703. !q%=save%:q%!4=5
  704. .q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by%
  705. 3q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF
  706. +t$="file_ff9":
  707.  jpegsave% t$="file_c85"
  708.  dstart% 
  709.  dstart%,%11000101,1,t$,q%+8,q%+24 
  710.  "Wimp_DragBox",,q%
  711. dozoom(s%,a%)
  712.  s%=0 
  713. /$z%(0)=
  714. $z%(0)+a%):
  715. $z%(0)="0" $z%(0)="1"
  716. /$z%(1)=
  717. $z%(1)+a%):
  718. $z%(1)="0" $z%(1)="1"
  719. 2!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:
  720.  SetI,,q%
  721. /!q%=pic%:
  722.  GetW,,q%:f%=q%!28:
  723.  &400c3,,q%
  724. pic%=
  725. create_window(x,y,F$)
  726. popup(pic%,f%)
  727. domenu(handle%,menu$,menutitle$)
  728. menuhandle%=handle%
  729. %menuptr%=buffer%:indirect%=idata%
  730. menuptr%!20=44
  731. $menuptr%=menutitle$
  732. ;menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0
  733.  !menuptr%!16=200:menuptr%!24=0
  734. menuptr%+=28
  735.  i1%=i%+1:i%=
  736. menu$+",",",",i1%)
  737. #8item$=
  738. menu$,i1%,i%-i1%):
  739. menuitem(item$):
  740.  item$=""
  741. $#menuptr%!-24=(menuptr%!-24)
  742.  handle%=101 
  743.  CrMenu,,buffer%,mousex%-64,96+9*44 
  744.  CrMenu,,buffer%,mousex%-32,mousey%+16
  745. menuitem(text$)
  746.  text$="" 
  747. )+flg%=0:submenu%=-1:I%=
  748. text$,":"):
  749. **flg%=
  750. text$,I%+1):text$=
  751. text$,I%-1)
  752. text$,">"):
  753. -.submenu%=
  754. text$,I%+1):text$=
  755. text$,I%-1)
  756. menuptr%!0=flg%
  757. menuptr%!4=submenu%
  758. (text$=m$(9)
  759. (F$="" 
  760.  F$="SpriteFile" 
  761.  F$="JPEGImage")) 
  762.  (text$=m$(14)
  763. vram%) 
  764. menuptr%!8=&07400021
  765. menuptr%!8=&07000021
  766.  text$*16+8>buffer%!16 buffer%!16=
  767.  text$*16+8
  768.  text$>12 
  769. 8Cmenuptr%!8=menuptr%!8 
  770.  256:menuptr%!20=
  771.  text$+1:menuptr%!16=0
  772. 9?menuptr%!12=indirect%:$indirect%=text$:indirect%+=
  773.  text$+2
  774. $(menuptr%+12)=text$
  775. menuptr%+=24
  776. menuselect(menus%)
  777.  GetP,,paltemp%:adjust%=paltemp%!8 
  778.  DcMenu,,buffer%,menus%,
  779. 200," ")
  780. ,,,a$
  781.  a$="" 
  782.  menuhandle% 
  783.  pic%
  784.  m$(9):
  785. callFSI
  786.  m$(14):fast%=
  787. fast%
  788.  m$(27):dest%=0
  789.  m$(13):dest%=1
  790.  m$(9):
  791. callFSI
  792.  m$(15)
  793. OGstatescale%=0:
  794.  I%=0
  795. 9:statescale%+=
  796. geticonstate(scalew%,I%)<<I%:
  797.  I%=10
  798. 13:statescale%+=
  799. geticonstate(scalew%,I%+6)<<I%:
  800. QCstateproc%=0:
  801.  I%=0
  802. 7:stateproc%+=
  803. geticonstate(proc%,I%)<<I%:
  804. RJstateoutput%=0:
  805.  I%=0
  806. 26:stateoutput%+=
  807. geticonstate(output%,I%)<<I%:
  808. SDstatejpeg%=0:
  809.  I%=0
  810. 3:statejpeg%+=
  811. geticonstate(jpego%,I%)<<I%:
  812. "CDIR <Choices$Write>.ChangeFSI":A%=
  813. "<Choices$Write>.ChangeFSI.Choices"
  814. #A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
  815. #A%,$p%(0),
  816. locale_convert($p%(1),decimal_point$,"."),$p%(2),$p%(3),$admode%,$adspcl%
  817. #A%,$s%(0),$s%(1),$s%(2),$s%(3)
  818.  m$(16):
  819. checkandfinish
  820.  adjust% 
  821. checkmouse(0,0,2,rmenuhandle%,0,0)
  822. create_window(x,y,title$)
  823. _-x=x*
  824. $z%(0)
  825. $z%(1):y=y*
  826. $z%(0)
  827. $z%(1)
  828. ` !z%=0:z%!4=-y:z%!8=x:z%!12=0
  829. a$z%!40=0:z%!44=-y:z%!48=x:z%!52=0
  830.  x<128 
  831.  y<128 z%?35=0 
  832.  z%?35=255
  833. c)$adtitle%="":
  834.  CreateW,,z% 
  835.  handle%
  836. $adtitle%=title$
  837. =handle%
  838. popup(handle%,f%)
  839.  "OS_ReadModeVariable",-1,4 
  840.  ,,modexshift%
  841.  "OS_ReadModeVariable",-1,5 
  842.  ,,modeyshift%
  843.  "OS_ReadModeVariable",-1,11 
  844.  ,,rightscr%
  845.  "OS_ReadModeVariable",-1,12 
  846.  ,,topscr%
  847. kArightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift%
  848. getw(handle%)
  849. m9xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2
  850. open_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%)
  851. open_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%)
  852.  handle%=-1
  853. q%!0=handle%:q%!28=bhandle%
  854. s)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1%
  855. q%!20=scx%:q%!24=scy%
  856.  OpenW,,q%
  857. getw(handle%)
  858. !q%=handle%:
  859.  GetW,,q%
  860. info(q%+4):bhandle%=q%!28:flags%=q%!32
  861. info(q%)
  862. |=x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20
  863. bx%=x0%-scx%:by%=y1%-scy%
  864. redraw_window(handle%)
  865.  handle%=pic% 
  866. ?!factors%=!ifactors%*
  867. $z%(0):factors%!4=ifactors%!4*
  868. $z%(0)
  869. Cfactors%!8=ifactors%!8*
  870. $z%(1):factors%!12=ifactors%!12*
  871. $z%(1)
  872. reduce(!factors%,factors%!8):
  873. reduce(factors%!4,factors%!12)
  874. !q%=handle%
  875.  RedrawW,,q% 
  876.  more%
  877. info(q%+4):by%=by%-
  878. $z%(0)
  879. $z%(1))
  880.  more%
  881.  jpegsave% 
  882.  jpegpaint% 
  883.  jpegpaint%,sar%,bx%,by%,factors%,jpegsize%,1 
  884. 1)=0 
  885.  spopx%,&134,sar%,n$,bx%,by%,,factors%,spx%
  886.  GetR%,0,q% 
  887.  more%
  888. geticonstate(handle%,icon%)
  889. &!q%=handle%:q%!4=icon%:
  890.  GetI,,q%
  891. =q%!24>>21 
  892. getmodeinfo
  893.  jpegsave% 
  894. &35,-1,4 
  895. ,,nx:
  896. &35,-1,5 
  897. =!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
  898. "XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans%
  899.  spopx%,&118,sar%,n$ 
  900.  ,,sptr%
  901.  sptr%!32=44 
  902. palptr%=0
  903.  grab%=0 
  904.  2048-8 
  905. (paltemp%!(grab%>>1)=sptr%!(grab%+44)
  906. palptr%=paltemp%
  907.  Q%=0
  908. 255:pixtrans%?Q%=Q%:
  909.  sptr%!32=44+2048 
  910.  Q%=0
  911.  ctran%,palptr%!(Q%<<2)
  912. pixtrans%?Q%:
  913.  "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans%
  914. 7spx%=0:
  915.  Q%=0
  916.  pixtrans%?Q%<>Q% spx%=pixtrans%
  917. deducemode
  918.  m,x,y
  919. geticonstate(output%,21) 
  920. geticonstate(output%,17) 
  921. ="JPEG8" 
  922. ="JPEG24"
  923. geticonstate(output%,18) 
  924.  &6,135 
  925. &35,-1,9 
  926.  m>3 
  927. &35,-1,4 
  928. &35,-1,5 
  929. x=180/(2^x):y=180/(2^y)
  930. ="S"+
  931. (2^m)+","+
  932.  x+","+
  933. geticonstate(output%,24) 
  934. =$oldmode%
  935. =$admode%
  936. showscaletofit
  937.  m,x,y
  938. $admode%=
  939. deducemode
  940.  ?admode% 
  941. $admode%,5)>
  942. $admode%,8) x=6 
  943. $admode%,2)>16 x+=5 
  944.  x+=4
  945. &35,-1,11 
  946. ,,tofitx:
  947. &35,-1,12 
  948. ,,tofity
  949. &35,-1,11 
  950. ,,tofitx:
  951. &35,-1,12 
  952. ,,tofity
  953. x = 12
  954. $admode%
  955. &35,m,11 
  956. ,,tofitx:
  957. &35,m,12 
  958. ,,tofity
  959. &35,m,4 
  960. &35,m,5 
  961.  y>x x=6 
  962. &35,m,9 
  963. ,,y:x+=y
  964. Atofitx+=1:tofity+=1:$adscale%=m$(17)+
  965.  tofitx+m$(18)+
  966.  tofity
  967. @q%!12=1<<21:!q%=output%:
  968.  I%=0
  969.  I%=x q%!8=1<<21 
  970.  q%!8=0
  971. =q%!4=I%+3:
  972.  SetI,,q%:
  973.  x=12 q%!8=0:q%!4=24:
  974.  SetI,,q%
  975. killcurrent(m$)
  976. "q%!12=1<<21:!q%=output%:q%!8=0
  977. q%!4=20:
  978.  SetI,,q%
  979. $admode%=m$
  980. ZS(I%)
  981.  A$+=
  982. ?I%:I%+=1:
  983. ?I%<14:=A$
  984. errorbox
  985.  Drag,,-1:!buffer%=
  986. :$(buffer%+4)=
  987. "Wimp_ReportError",buffer%,%010100000000,m$(20),"!changefsi",1,m$(29) 
  988.  A%=4 
  989. removearea:
  990. "Wimp_CloseDown":
  991. ChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,
  992.  ram%,fast%)
  993.  A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%()
  994.  xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%(),jpq%(),m
  995. A$,1)<>" "
  996.  A$<>0 A$=
  997. A$,2):
  998. A$,1)=" " A$=
  999. A$,2):
  1000. A$,1)=" " A$=
  1001. A$,5))="-QUIT" 
  1002. A$,7):
  1003. A$,1)<>" "
  1004.  A$<>0 A$=
  1005. A$,2):
  1006. A$,1)=" " A$=
  1007. A$,2):
  1008.  A$(100):ARG%=0:B%=
  1009. A$," ")
  1010.  B%<>0
  1011. +ARG%+=1:A$(ARG%)=
  1012. A$,B%-1):A$=
  1013. A$,B%+1)
  1014. A$,1)=" ":A$=
  1015. A$,2):
  1016. A$," ")
  1017.  A$<>"" ARG%+=1:A$(ARG%)=A$
  1018. Xinvert%=
  1019. :range%=
  1020. :sharpen%=
  1021. :info%=
  1022. :cache%=
  1023. :cacheareanumber%=0:dither%=
  1024. :black%=
  1025. Chist%=
  1026. :equal%=
  1027. :vflip%=
  1028. :hflip%=
  1029. :scale%=
  1030. :scaleo%=
  1031. :scrapf%=
  1032. 6gamma=1:rotate%=
  1033. :max%=20000000:bright%=15:lock%=
  1034. rwt=.299:gwt=.587:bwt=.114
  1035.  ARG%<3 
  1036. "ChangeFSI interactive input (read FSIinfo for command line details)"
  1037. "Source file: "s$,"Destination file: "f$,"Output mode: "m$
  1038. "X Scale (eg. 2:1): "xs$:
  1039. "Y Scale (eg. 2:1): "ys$
  1040. "Info on input picture? "a$:
  1041. a$,1))="Y" info%=
  1042. "Invert picture colours? "a$:
  1043. a$,1))="Y" invert%=
  1044. "Compute histogram of input? "a$:
  1045. a$,1))="Y" hist%=
  1046. "Apply histogram equalisation? "a$:
  1047. a$,1))="Y" equal%=
  1048. "Expand input dynamic range? "a$:
  1049. a$,1))="Y" range%=
  1050. :equal%=
  1051. "Sharpen picture by (eg. 12 for harsh, 24 for soft): "a$
  1052.  a$<>"" sharpen%=
  1053. "Rotate? "a$:
  1054. a$,1))="Y" rotate%=1
  1055. scale%=
  1056. :scaleo%=
  1057. :fast%=
  1058.  A%=ARG%
  1059. uc(A$(ARG%))="-INFO" info%=
  1060. :A$(ARG%)="":ARG%-=1
  1061. uc(A$(ARG%))="-HIST" hist%=
  1062. :A$(ARG%)="":ARG%-=1
  1063. uc(A$(ARG%))="-LOCK" lock%=
  1064. :A$(ARG%)="":ARG%-=1
  1065. uc(A$(ARG%))="-EQUAL" equal%=
  1066. :range%=
  1067. :A$(ARG%)="":ARG%-=1
  1068. uc(A$(ARG%))="-RANGE" range%=
  1069. :equal%=
  1070. :A$(ARG%)="":ARG%-=1
  1071. uc(A$(ARG%))="-INVERT" invert%=
  1072. :A$(ARG%)="":ARG%-=1
  1073. uc(A$(ARG%))="-NOSCALE" scale%=
  1074. :scaleo%=
  1075. :A$(ARG%)="":ARG%-=1
  1076. uc(A$(ARG%))="-NOSIZE" scale%=
  1077. :A$(ARG%)="":ARG%-=1
  1078. uc(A$(ARG%))="-NODITHER" dither%=
  1079. :A$(ARG%)="":ARG%-=1
  1080. uc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1
  1081. uc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1
  1082. uc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1
  1083. uc(A$(ARG%))="-VFLIP" vflip%=
  1084. :A$(ARG%)="":ARG%-=1
  1085. uc(A$(ARG%))="-HFLIP" hflip%=
  1086. :A$(ARG%)="":ARG%-=1
  1087. uc(A$(ARG%))="-NOMODE" fast%=
  1088. :A$(ARG%)="":ARG%-=1
  1089. A$(ARG%),6))="-BLACK" 
  1090. Jblack%=32:
  1091.  A$(ARG%)>6 black%=
  1092. A$(ARG%),7):
  1093.  black%>128 black%=128
  1094. A$(ARG%)="":ARG%-=1
  1095. A$(ARG%),6))="-GAMMA" 
  1096. 1gamma=2.2:
  1097.  A$(ARG%)>6 gamma=
  1098. A$(ARG%),7)
  1099. A$(ARG%)="":ARG%-=1
  1100. A$(ARG%),8))="-SHARPEN" 
  1101.  6sharpen%=24:
  1102.  A$(ARG%)>8 sharpen%=
  1103. A$(ARG%),9)
  1104. A$(ARG%)="":ARG%-=1
  1105. A$(ARG%),7))="-SMOOTH" 
  1106. $7sharpen%=-1:
  1107.  A$(ARG%)>7 sharpen%=-
  1108. A$(ARG%),8)
  1109. %3A$(ARG%)="":ARG%-=1:
  1110.  sharpen%<-23 sharpen%=-23
  1111. A$(ARG%),4))="-RED" rwt=
  1112. A$(ARG%),5):A$(ARG%)="":ARG%-=1
  1113. A$(ARG%),6))="-GREEN" gwt=
  1114. A$(ARG%),7):A$(ARG%)="":ARG%-=1
  1115. A$(ARG%),5))="-BLUE" bwt=
  1116. A$(ARG%),6):A$(ARG%)="":ARG%-=1
  1117. A$(ARG%),4))="-MAX" 
  1118. +Fmax%=
  1119. A$(ARG%),5):
  1120. A$(ARG%),"K")
  1121. A$(ARG%),"k") max%=max%*1024
  1122. A$(ARG%)="":ARG%-=1
  1123.  A%=ARG%
  1124. /2s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5)
  1125.  okinfo% 
  1126.  info%=
  1127.  workspace%>=0 
  1128. flex%=
  1129.  worklimit%=0 
  1130.  flex%=
  1131.  flex%=
  1132. :nextlocation%=worklimit%
  1133. 7"pnm$=
  1134. uc(m$):
  1135. pnm$+",",3) 
  1136. "AIM":m=-1:m$=""
  1137. "P1,","P4,":m=-2:m$="":spm=18
  1138. "P2,","P5,":m=-2:m$="T":spm=20
  1139. "P3,","P6,":m=-4:pnm$=
  1140. pnm$,2):p6bits=8:I%=
  1141. m$,4):m$=""
  1142.  I%>0
  1143.  I%<8 p6bits=I%
  1144. "P15":m=-3:m$=""
  1145. "C15":m=-5:m$=""
  1146. "IRL":m=-4:m$="":p6bits=8
  1147. "S16":m=-6:m$=""
  1148. "S24":m=-8:m$="":p6bits=8
  1149. "S32":m=-8:m$="":p6bits=8
  1150. "JPE":m$="":p6bits=8:
  1151. pnm$,8)="JPEGMONO" m=-9:jpegquality%=
  1152. pnm$,9) 
  1153.  m=-10:jpegquality%=
  1154. pnm$,5)
  1155.  m$:spm=m:m$=
  1156. m$,1)):
  1157. "CDRT",m$)=0 m$=""
  1158.  xs$="" 
  1159. xs$,1)="-" 
  1160. G#xmul%=1:xdiv%=1:ymul%=1:ydiv%=1
  1161.  ys$="" ys$=xs$
  1162. J)xmul%=
  1163.  xs$:xdiv%=
  1164. xs$,":")+1)
  1165. K)ymul%=
  1166.  ys$:ydiv%=
  1167. ys$,":")+1)
  1168. M&flag=-1:
  1169. 8,5,s$ 
  1170.  r0,,r2:dir=r0=2
  1171.  dir 
  1172. ODpanic=
  1173. 8,5,s$+".raw" 
  1174.  r0,,r2:
  1175.  r0=1 s$+=".raw":dir=
  1176. :panic=
  1177.  panic 
  1178. 8,5,s$+".red" 
  1179.  r0,,r2:
  1180.  r0=1 panic=
  1181.  panic 
  1182.  42,"Directory given"
  1183. S>ftype=r2>>8 
  1184.  &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0
  1185.  dir 
  1186. U?c%=
  1187. (s$+".red"):
  1188.  c%=0 
  1189.  42,"Red file "+s$+".red not found"
  1190. VFcc%=
  1191. (s$+".green"):
  1192.  cc%=0 
  1193. 42,"Green file "+s$+".green not found"
  1194. WEccc%=
  1195. (s$+".blue"):
  1196.  ccc%=0 
  1197. 42,"Blue file "+s$+".blue not found"
  1198. Y/c%=
  1199.  c%=0 
  1200.  42,"File "+s$+" not found"
  1201. close:
  1202. colourindex=255
  1203. &66f4d 
  1204. ;pcd%
  1205.  ftype 
  1206.  &FF9:flag=0
  1207. uc(s$),".HIP.")
  1208. uc(s$),":HIP.") 
  1209. b flag=300:I%=
  1210. uc(s$),"HIP.")
  1211. s$,I%)="LOP.":cc%=
  1212.  cc%=0 
  1213. 42,"Can't find Lop file "+s$
  1214.  &FF0:
  1215. #c%=0:S$="":
  1216.  I%=1
  1217. 4:S$+=
  1218.  S$="II*"+
  1219. 0 flag=1500:bigendian=
  1220.  S$="MM"+
  1221. 0+"*" flag=1500:bigendian=
  1222.  &DFA:flag=800:
  1223.  dir flag=801
  1224.  &DE2:flag=1000
  1225.  &CBE:flag=3800
  1226.  &BE8:
  1227. (pcd%
  1228. 1)=0 flag=3600
  1229.  &7A0:flag=1200
  1230.  &69d:flag=2000
  1231.  &699:flag=700
  1232.  &698:flag=100
  1233.  &697:flag=1900
  1234.  &691:flag=2600
  1235.  &690:flag=2500
  1236.  &666:flag=666
  1237.  &601:flag=3000
  1238.  &371:flag=3100
  1239.  &300:flag=1300:
  1240.  dir flag=1301
  1241.  4:flag=900:
  1242.  dir flag=901
  1243.  6:flag=950
  1244.  flag=-1 
  1245. #c%=0:S$="":
  1246.  I%=1
  1247. 22:S$+=
  1248. S$,7)="FSIfile" flag=2100
  1249.  flag=-1 
  1250. S$,8)="SIMPLE  " flag=2800
  1251.  flag=-1 
  1252. S$,8))="MERCSOFT"
  1253. S$,8))="SNAPSHOT"flag=902
  1254.  flag=-1 
  1255. S$,8))="MERCSOF1" flag=903
  1256.  flag=-1 
  1257. S$,13))="IRLAM YUV 411" flag=2250
  1258.  flag=-1 
  1259. S$,5)="Irlam" flag=2200
  1260.  flag=-1 
  1261. S$,2)="BM" flag=2400:riffoff%=0
  1262.  flag=-1 
  1263. S$,4)="RIFF" 
  1264. S$,9,8)="RDIBdata" 
  1265. S$,21,2)="BM" flag=2400:riffoff%=20
  1266.  flag=-1 
  1267. S$,4)="GIF8" flag=500
  1268.  flag=-1 
  1269. S$,5)="AV_VO" flag=600
  1270.  flag=-1 
  1271. S$,4)=
  1272. &95 flag=1100
  1273.  flag=-1 
  1274. S$,4)=
  1275. 8 flag=1400
  1276.  flag=-1 
  1277. S$,4)=
  1278. 1 flag=2900
  1279.  flag=-1 
  1280. S$,4)="RIX3" flag=2700
  1281.  flag=-1 
  1282. S$,4)="II*"+
  1283. 0 flag=1500:bigendian=
  1284.  flag=-1 
  1285. S$,4)="MM"+
  1286. 0+"*" flag=1500:bigendian=
  1287.  flag=-1 
  1288. S$,2)=
  1289. &CC flag=2300
  1290.  flag=-1 
  1291. S$,2)="P4"
  1292. S$,2)="P5"
  1293. S$,2)="P6"
  1294. S$,2)="P8" flag=3300:info$=""
  1295.  flag=-1 
  1296. S$,3)="P15" flag=3400
  1297.  flag=-1 
  1298. S$,3)="P14" flag=3410
  1299.  flag=-1 
  1300. S$,3)="PIC" flag=3500
  1301.  flag=-1 
  1302. S$,3)="T-I" flag=3800
  1303.  flag=-1 
  1304. S$,3))="P13" flag=3450
  1305.  flag=-1 
  1306. S$,4)="FORM" 
  1307. S$,9,4)="ILBM" flag=1600
  1308.  flag=-1 
  1309. S$,8)="ALPIAR12" flag=3900:colourindex=4095
  1310.  flag=-1 
  1311. S$,8)="ALPIAR16" flag=3905:colourindex=65535
  1312.  flag=-1 
  1313. S$,7,4)="JFIF" 
  1314. S$,3)=
  1315.  ftype=&C85 
  1316. *jpegblk%=
  1317. dim(20):
  1318. cachesize(jpegblk%)
  1319.  cache%<
  1320. progjpg_needdjpeg(c%) 
  1321. #c%:c%=0:X%=
  1322. "Run:djpeg"
  1323. subtask("djpeg -maxmemory 2048 "+s$+" <Wimp$Scrap>")
  1324. "XOS_CLI","djpeg -maxmemory 2048 "+s$+" <Wimp$Scrap>" 
  1325. subtask("djpeg -maxmemory 2048 "+s$+" <Wimp$Scrap>")
  1326. "<Wimp$Scrap>":
  1327.  c%=0 
  1328. >scrapf%=
  1329. :flag=3300:info$="JPEG (JFIF) file converted to "
  1330. flag=3700
  1331.  flag=-1 
  1332. S$,5)="btpc " 
  1333. #c%:c%=0:
  1334. subtask("<ChangeFSI$Dir>.btpc "+s$+" <Wimp$Scrap>")
  1335. "<Wimp$Scrap>":
  1336.  c%=0 
  1337. 7scrapf%=
  1338. :flag=3300:info$="BTPC file converted to "
  1339.  flag=-1 
  1340. #c%=&10:S$="":
  1341.  I%=1
  1342. 9:S$+=
  1343.  S$="MILLIPEDE" flag=200
  1344.  flag=-1 
  1345. #c%=&41:S$="":
  1346.  I%=1
  1347. 8:S$+=
  1348. S$,4)="PNTG" flag=1800:st%=&280
  1349.  flag=-1 
  1350. #c%=196:S$="":
  1351.  I%=1
  1352. 8:S$+=
  1353. S$,4)="PNTG" flag=1800:st%=&2e2
  1354.  flag=-1 
  1355. #c%=522:S$="":
  1356.  I%=1
  1357. 8:S$+=
  1358. &fe flag=1850
  1359.  flag=-1 
  1360. #c%=0:
  1361. #c%=10 
  1362.  C%<6 
  1363.  C%<>1 
  1364. #c%=1 flag=1900
  1365.  flag=-1 
  1366. uc(s$),".PCX.")
  1367. uc(s$),":PCX.")
  1368. s$,4)="/PCX" flag=1900
  1369.  flag=-1 
  1370. uc(s$),".IMAGE.")
  1371. uc(s$),":IMAGE.") flag=400
  1372.  flag=-1 
  1373. s$,4))=".RAW" flag=100
  1374.  flag=-1 
  1375. s$,3))="TGA" flag=2000
  1376.  flag=-1 
  1377. s$,3))="VDA" flag=2000
  1378.  flag=-1 
  1379. uc(s$),".PIC.")
  1380. uc(s$),":PIC.") flag=700
  1381.  flag=-1 
  1382. uc(s$),".IMG.")
  1383. uc(s$),":IMG.")
  1384. s$,4)="/IMG" flag=1400
  1385.  flag=-1 
  1386. uc(s$),".DSP.")
  1387. uc(s$),":DSP.")
  1388. s$,4)="/DSP" flag=1700
  1389.  flag=-1 
  1390. s$,4))="/RGB" flag=3200
  1391.  flag=-1 
  1392. s$,4))="/PCD"
  1393. ftype=&be8)
  1394. ((pcd%
  1395. 1)=1) 
  1396. #c%:c%=0:
  1397. subtask("<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <Wimp$Scrap> { > <Wimp$ScrapDir>.pcdtemp }")
  1398. "<Wimp$Scrap>":scrapf%=
  1399. :flag=3300:info$="PhotoCD file converted to "
  1400.  flag=-1 
  1401. close:
  1402.  42,"This type of file is not recognised by ChangeFSI"
  1403. Cstep24=1:input=8:ham=0:planar%=0:bigendianbits=
  1404. :r$="FN"+
  1405.  flag
  1406. 9compression=0:hpredict%=1:striprows%=-1:cachebytes%=
  1407.  xdiv%=0 
  1408.  ydiv%=0 scale%=
  1409.  r%(colourindex)
  1410.  g%(colourindex),b%(colourindex)
  1411.  flag 
  1412. @quant%=4:
  1413. #c%=4:F%=
  1414. W+&1C:
  1415. #c%=F%:st%=
  1416. W+F%-&20:K%=
  1417. W+F%-&20
  1418.  sm<256 
  1419. 53,sm,3 
  1420.  ,,I%
  1421.  st%=F%+12 
  1422. defpal2 
  1423. ipal(2)
  1424. #c%=F%-16:sx%=(
  1425. W+1)*32:rowbytes%=sx%>>3:input=1
  1426. W+1:I%=
  1427. W:sx%-=31-
  1428.  st%=F%+12 
  1429. defpal4 
  1430. ipal(4)
  1431. #c%=F%-16:sx%=(
  1432. W+1)*16:rowbytes%=sx%>>2:input=2
  1433. !sy%=
  1434. W+1:I%=
  1435. W:sx%-=(31-
  1436.  st%=F%+12 
  1437. defpal16 
  1438. ipal(16)
  1439. #c%=F%-16:sx%=(
  1440. W+1)*8:rowbytes%=sx%>>1:input=4
  1441. !sy%=
  1442. W+1:I%=
  1443. W:sx%-=(31-
  1444.  63,255:
  1445.  st%=F%+12 
  1446. defpal
  1447.  K%>st% K%=st%
  1448.  K%-12-F%=2048 
  1449. I%=255 
  1450. #c%=&38
  1451.  C%=0
  1452. 255:D%=
  1453. 9r%(C%)=
  1454. #c%/255*F:g%(C%)=
  1455. #c%/255*F:b%(C%)=
  1456. #c%/255*F
  1457. ipal63
  1458. #c%=F%-16:sx%=(
  1459. W+1)*4:rowbytes%=sx%:sy%=
  1460. W+1:I%=
  1461. W:sx%-=(31-
  1462. 42,"Not understood RISC OS sprite"
  1463. @r$="FN8":
  1464. 53,sm,4 
  1465.  ,,nx:
  1466. 53,sm,5 
  1467.  ,,ny:nx=1<<nx:ny=1<<ny
  1468.  scale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2
  1469. Vinfo$="RISC OS sprite, mode "+
  1470.  sm+" "+
  1471.  sx%+" by "+
  1472.  sy%+" pixels, "+
  1473. bits(input)
  1474. bpp%=sm>>>27:
  1475.  bpp% 
  1476.  1:bpp%=1:r$="FN8":
  1477.  st%=F%+12 
  1478. defpal2 
  1479. newropal(2)
  1480.  2:bpp%=2:r$="FN8":
  1481.  st%=F%+12 
  1482. defpal4 
  1483. newropal(4)
  1484.  3:bpp%=4:r$="FN8":
  1485.  st%=F%+12 
  1486. defpal16 
  1487. newropal(16)
  1488.  4:bpp%=8:r$="FN8":
  1489.  st%=F%+12 
  1490. defpal 
  1491. newropal(256)
  1492.  5:bpp%=16:r$="FN16":
  1493.  st%=F%+12 
  1494.  rpal%(255),gpal%(255):step24=2
  1495.  C%=0
  1496. "gpal%(C%)=(C%>>5)<<8 
  1497. +rpal%(C%)=((C%>>2)
  1498. 31)<<16 
  1499. 3)<<11
  1500.  C%=0
  1501. 31:r%(C%)=C%/31*F:
  1502. :g%()=r%():b%()=r%()
  1503.  6:bpp%=32:r$="FN24":
  1504.  st%=F%+12 
  1505. nopal 
  1506. !rbo%=0:gbo%=1:bbo%=2:step24=4
  1507.  8:bpp%=24:r$="FN24":
  1508.  st%=F%+12 
  1509. nopal 
  1510. rbo%=0:gbo%=1:bbo%=2
  1511. 42,"Not understood new format RISC OS sprite bpp"
  1512. (nx=(sm>>1) 
  1513. &1fff:ny=(sm>>14) 
  1514. &1fff
  1515.  scale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90
  1516. #c%=F%-16:rowbytes%=(
  1517. W+1)*4:sy%=
  1518. W+1:I%=
  1519. W:sx%=(rowbytes%*8-(31-
  1520. W))/bpp%:input=bpp%
  1521. Linfo$="New RISC OS sprite, "+
  1522.  sx%+" by "+
  1523.  sy%+" pixels, "+
  1524. bits(input)
  1525.  bpp%=32 input=24
  1526. #c%=st%:cache%=
  1527. Equant%=8:
  1528. #c%=0:sx%=
  1529. HW:sy%=
  1530. nopal:input=24:rowbytes%=sx%*3+2
  1531. 5rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=
  1532. Linfo$="QRT .raw image, "+
  1533.  sx%+" by "+
  1534.  sy%+" pixels, 24 bits per pixel"
  1535. Gquant%=8:
  1536. #c%=5:sx%=
  1537. HW:sy%=
  1538. HW:sx%=(
  1539. HW-sx%+2)/2:sy%=(
  1540. HW-sy%+2)/2
  1541. #c%=&1a:cadsoft%=
  1542. #c%=&200
  1543.  C%=0
  1544. 255:r%(C%)=
  1545. #c%/255*F:
  1546.  C%=0
  1547. 255:g%(C%)=
  1548. #c%/255*F:
  1549.  C%=0
  1550. 255:b%(C%)=
  1551. #c%/255*F:
  1552. #c%=&600:st%=&600:cache%=
  1553.  cadsoft%=2 
  1554. !Crep%=0:r$="FN1100":plbuff%=
  1555. dim(sx%):plbytes%=sx%:cachebytes%=
  1556. r$="FN8":rowbytes%=sx%
  1557. %^info$="Cadsoft type "+
  1558.  cadsoft%+" image, "+
  1559.  sx%+" by "+
  1560.  sy%+" pixels, 8 bits per pixel"
  1561. 'Iquant%=5:
  1562. #c%=&2c:st%=
  1563. W+(&38-&2c):
  1564. #cc%=&2c:stcc%=
  1565. W1(cc%)+(&38-&2c)
  1566. #c%=&1c:sx%=(
  1567. W+1)*4:sy%=
  1568. #c%=st%:
  1569. #cc%=stcc%
  1570.  rpal%(255),gpal%(255):input=16:cache%=
  1571. :rowbytes%=sx%
  1572.  C%=0
  1573. +.rpal%(C%)=C%
  1574. 64)<<2 
  1575. &38)<<13
  1576. ,Sgpal%(C%)=(C%
  1577. 4)<<1
  1578.  ((C%
  1579. 3)<<1
  1580. &60)>>2)<<8 
  1581. 128)>>3)<<16
  1582.  C%=0
  1583. 31:r%(C%)=C%/31*F:
  1584. :g%()=r%():b%()=r%()
  1585. /+pbuff%=
  1586. dim(sx%):
  1587.  scale% ymul%=ymul%*2
  1588. 0Iinfo$="ArVis image, "+
  1589.  sx%+" by "+
  1590.  sy%+" pixels, 15 bits per pixel"
  1591. 2Equant%=8:
  1592. #c%=0:sx%=
  1593. beHW:sy%=
  1594. beHW:X%=
  1595. beHW:st%=
  1596. #c%+X%:
  1597. #c%=st%
  1598. 3Vplbuff%=
  1599. dim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1
  1600. nopal:input=24:rep%=0:cachebytes%=
  1601. :cache%=
  1602. :step24=3
  1603. 5`info$="RT image. run length encoded image, "+
  1604.  sx%+" by "+
  1605.  sy%+" pixels, 24 bits per pixel"
  1606. 7,compression=5:
  1607. #c%=6:GIFsx=
  1608. HW:GIFsy=
  1609. 88GIF=
  1610. #c%:GIFback=
  1611. #c%:GIFext=
  1612. #c%:quant%=(GIF 
  1613.  7)+1
  1614.  GIF 
  1615.  &80 
  1616.  C%=0
  1617. (1<<quant%)-1
  1618. ;9r%(C%)=
  1619. #c%/255*F:g%(C%)=
  1620. #c%/255*F:b%(C%)=
  1621. #c%/255*F
  1622. A$GIFgcesz=
  1623. #c%+GIFgcesz
  1624.  GIFgcesz=0:I%=
  1625.  I%<>
  1626.  42,"GIF file without , in right place"
  1627.  GIFext<>0 
  1628.  GIFext<>49 
  1629.  GIFext>49 
  1630. G*xdiv%=xdiv%*64:xmul%=xmul%*(GIFext+15)
  1631. I*ydiv%=ydiv%*(GIFext+15):ymul%=ymul%*64
  1632. L,GIFleft=
  1633. HW:GIFright=
  1634. HW:sx%=
  1635. HW:sy%=
  1636.  GIFsx<sx% 
  1637.  GIFsy<sy% 
  1638.  info% 
  1639. "GIF file with bigger image inside:"
  1640. "Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y"
  1641. "Continue with monitor's size [Y or y]?"A$
  1642.  A$="Y"
  1643. A$="y" sx%=GIFsx:sy%=GIFsy
  1644. "Continuing with ";sx%"x by "sy%"y"
  1645. V*GIF=
  1646.  GIF 
  1647.  &40 flag=501:r$="FN8"
  1648. WJsetcodes%=
  1649. #c%:clearcode%=1<<setcodes%:st%=
  1650. #c%:cache%=
  1651. :cachebytes%=
  1652.  table%(1<<12):stk%=
  1653. dim(1<<13):buf%=
  1654. dim(280):plbuff%=
  1655. dim(sx%)
  1656.  I%=0
  1657. clearcode%-1:table%(I%)=I%:
  1658. ZCinfo$="GIF file, "+
  1659.  sx%+" by "+
  1660.  sy%+" pixels, "+
  1661. bits(quant%)
  1662. \ quant%=8:
  1663. #c%=&5c:
  1664.  C%=0
  1665. ]9r%(C%)=
  1666. #c%/255*F:g%(C%)=
  1667. #c%/255*F:b%(C%)=
  1668. #c%/255*F
  1669. #c%=&36e:sy%=
  1670. HW:sx%=
  1671. `5st%=&380:
  1672. #c%=st%:rowbytes%=sx%:r$="FN8":cache%=
  1673. aGinfo$=".PIC image, "+
  1674.  sx%+" by "+
  1675.  sy%+" pixels, 8 bits per pixel"
  1676. c$quant%=8:
  1677. #c%=0:a$=
  1678. #c%:st%=
  1679. d!sx%=
  1680.  a$:sy%=
  1681. a$," ")))
  1682. nopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24"
  1683. f!rbo%=0:gbo%=1:bbo%=2:cache%=
  1684. gLinfo$="MTV .pic image, "+
  1685.  sx%+" by "+
  1686.  sy%+" pixels, 24 bits per pixel"
  1687. i*sx%=512:sy%=256:
  1688.  scale% ymul%=ymul%*2
  1689. j4plbuff%=
  1690. dim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx%
  1691. cache%=
  1692. :cachebytes%=
  1693.  C%=0
  1694. 255:r%(C%)=(C%
  1695. 63)/63*F:
  1696. :g%()=r%():b%()=r%():quant%=6
  1697. mJinfo$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel"
  1698. o<sx%=512:sy%=256:input=24:quant%=6:
  1699.  scale% ymul%=ymul%*2
  1700. p0rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
  1701. q=buff%=
  1702. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%
  1703. r:wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx%
  1704.  C%=0
  1705. 255:r%(C%)=(C%
  1706. 63)/63*F:
  1707. :g%()=r%():b%()=r%()
  1708. tRinfo$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel"
  1709. v(quant%=8:st%=0:
  1710. #c%=0:
  1711. #c%=65536 
  1712. w8sx%=256:sy%=256:
  1713.  scale% ymul%=ymul%*2:xmul%=xmul%*2
  1714. sx%=512:sy%=512
  1715.  C%=0
  1716. 255:r%(C%)=C%/255*F:
  1717. :g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=
  1718. |?info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel"
  1719. quant%=4:
  1720. #c%=65536 
  1721. 8sx%=256:sy%=256:
  1722.  scale% ymul%=ymul%*2:xmul%=xmul%*2
  1723. sx%=512:sy%=512
  1724. =buff%=
  1725. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2
  1726.  C%=0
  1727. 255:r%(C%)=C%/255*F:
  1728. :g%()=r%():b%()=r%()
  1729. Oinput=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel"
  1730. Bquant%=4:
  1731. #c%=8:sx%=
  1732. W:rowbytes%=sx%*3/2:sy%=
  1733. W:st%=20:
  1734. #c%=20
  1735.  scale% ymul%=ymul%*2
  1736. Mplbuff%=
  1737. dim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1
  1738.  C%=0
  1739. 255:r%(C%)=(C%
  1740. &F)/&F*F:
  1741. :g%()=r%():b%()=r%():cache%=
  1742. dinput=24:info$="Hawk V9/Snapshot Colour image, "+
  1743.  sx%+" by "+
  1744.  sy%+" pixels, 12 bits per pixel"
  1745. \quant%=5:
  1746. #c%=8:sx%=
  1747. W:rowbytes%=sx%*2:sy%=
  1748. W:st%=20:
  1749. #c%=20:cache%=
  1750. :r$="FN16":flag=700
  1751.  rpal%(255),gpal%(255):input=16:step24=2
  1752.  C%=0
  1753. "gpal%(C%)=(C%>>5)<<8 
  1754. +rpal%(C%)=((C%>>2)
  1755. 31)<<16 
  1756. 3)<<11
  1757.  C%=0
  1758. 31:r%(C%)=C%/31*F:
  1759. :g%()=r%():b%()=r%()
  1760. ainput=16:info$="Hawk V9 mk II Colour image, "+
  1761.  sx%+" by "+
  1762.  sy%+" pixels, 16 bits per pixel"
  1763. @quant%=8:
  1764. #c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900
  1765.  C%=0
  1766. 255:r%(C%)=C%/255*F:
  1767. :g%()=r%():b%()=r%():r$="FN8":cache%=
  1768. Finfo$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel"
  1769.  1000
  1770. Uquant%=4:sx%=640:sy%=256:
  1771. defpal:st%=
  1772. W:r$="FN"+
  1773. (1000+
  1774.  scale% ymul%=ymul%*2
  1775. %buff%=
  1776. dim(sx%):ctable%=
  1777. dim(st%)
  1778. 12,4,c%,ctable%,st%:st%=
  1779. .pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx%
  1780. Ainfo$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel"
  1781.  1100
  1782. @quant%=1:
  1783. #c%=4:sx%=
  1784. beW:sy%=
  1785. beW:input=
  1786. beW:bigendianbits=
  1787. beW:S%=
  1788. Kcache%=
  1789.  S%=2 cachebytes%=
  1790. :info$="Byte Encoded " 
  1791.  info$="":r$="FN8"
  1792.  I%=0
  1793. D%/3-1:r%(I%)=
  1794. #c%/255*F:
  1795.  I%=0
  1796. D%/3-1:g%(I%)=
  1797. #c%/255*F:
  1798.  I%=0
  1799. D%/3-1:b%(I%)=
  1800. #c%/255*F:
  1801.  input 
  1802.  1:r%(0)=F:g%(0)=F:b%(0)=F
  1803.  4,8:
  1804. nopal
  1805. nopal
  1806.  input 
  1807.  1:rowbytes%=(sx%+15>>4)<<1
  1808.  4:rowbytes%=(sx%+3>>2)<<1
  1809.  8:rowbytes%=(sx%+1>>1)<<1
  1810.  24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3
  1811.  S%=1 bbo%=0:rbo%=2
  1812.  42,"Can't do this Sun pixrect"
  1813. Nst%=D%+&20:rep%=0:
  1814.  cachebytes% plbuff%=
  1815. dim(rowbytes%):plbytes%=rowbytes%
  1816. Dinfo$+="Sun image, "+
  1817.  sx%+" by "+
  1818.  sy%+" pixels, "+
  1819. bits(input)
  1820.  1200
  1821. >quant%=8:sx%=800:sy%=800:st%=1600:
  1822. #c%=st%:vflip%=
  1823.  vflip%
  1824. nopal:r$="FN8":rowbytes%=sx%:cache%=
  1825. Iinfo$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel"
  1826.  1300
  1827. @quant%=8:sx%=128:sy%=256:st%=0:
  1828. #c%=0:
  1829.  scale% xmul%=xmul%*2
  1830. nopal:r$="FN8":rowbytes%=sx%:cache%=
  1831. @info$="satellite image, 128 by 256 pixels, 8 bits per pixel"
  1832.  1301
  1833. <input=24:quant%=8:sx%=128:sy%=256:
  1834.  scale% xmul%=xmul%*2
  1835. Obuff%=
  1836. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:
  1837. nopal:r$="FN901"
  1838. Hinfo$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel"
  1839.  1400
  1840. &planar%=
  1841. #c%=0:Z%=
  1842.  Z%>255 
  1843. +st%=
  1844. beHW*2:planes%=
  1845. beHW:patlen%=
  1846. +pw%=
  1847. beHW:ph%=
  1848. beHW:sx%=
  1849. beHW:sy%=
  1850. Cst%=
  1851. HW*2:input=
  1852. HW:patlen%=
  1853. HW:pw%=
  1854. HW:ph%=
  1855. HW:sx%=
  1856. HW:sy%=
  1857.  scale% 
  1858. #xmul%=xmul%*pw%:xdiv%=xdiv%*282
  1859. #ymul%=ymul%*ph%:ydiv%=ydiv%*282
  1860. Wrowbytes%=sx%+7>>3:pbuff%=
  1861. dim(sx%):plbytes%=rowbytes%*planes%:buff%=
  1862. dim(plbytes%)
  1863. #c%=st%:vrep%=0
  1864.  C%=0
  1865. (1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:
  1866. :g%()=r%():b%()=r%()
  1867. Dinfo$="IMG file, "+
  1868.  sx%+" by "+
  1869.  sy%+" pixels, "+
  1870. bits(planes%)
  1871.  1500
  1872. #c%=4:dir%=
  1873. tiff(4):
  1874. #c%=dir%
  1875. 6rgb=
  1876. :greyunit=100:planar%=1:fillorder=1:resunit=2
  1877. )xnum%=90:xdenom%=1:ynum%=90:ydenom%=1
  1878. tiff(3):
  1879.  Z%=1
  1880. tiff(3):D%=
  1881. tiff(3):C%=
  1882. tiff(4)
  1883.  C%>1 V%=
  1884. tiff(4) 
  1885.  D%=2 
  1886. #c%=dir%+2+Z%*12 
  1887.  D%<4 V%=
  1888. tiff(D%):
  1889. #c%=dir%+2+Z%*12 
  1890. tiff(4)
  1891.  256:sx%=V%
  1892.  257:sy%=V%
  1893.  258:
  1894.  C%>1 
  1895.  D%*C%>6 
  1896. #c%=V%:quant%=
  1897. tiff(D%)
  1898. )input=quant%:
  1899.  I%=1
  1900. C%-1:V%=
  1901. tiff(D%)
  1902.  V%<>quant% 
  1903. 42,"Can't do RGB TIFF with different numbers of bits per pixel"
  1904. input+=V%
  1905. nopal
  1906.  quant%=V% 
  1907.  &FF:input=quant%
  1908.  I%=0
  1909. (1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
  1910. g%()=r%():b%()=r%()
  1911. #c%=dir%+2+Z%*12
  1912. quant%=V%:input=quant%
  1913.  I%=0
  1914. (1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
  1915. g%()=r%():b%()=r%()
  1916.  259:compression=V%
  1917.  262:photometric=V%:
  1918.  V%=0 invert%=
  1919. invert%
  1920.  266:fillorder=V%
  1921.  273:stc%=C%:stv%=V%:std%=D%
  1922.  277:sampperpix%=V%:input=quant%*V%:rgb=V%=3
  1923.  278:striprows%=V%
  1924.  279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D%
  1925.  282:
  1926. #c%=V%:xnum%=
  1927. tiff(4):xdenom%=
  1928. tiff(4)
  1929. #c%=dir%+2+Z%*12
  1930.  283:
  1931. #c%=V%:ynum%=
  1932. tiff(4):ydenom%=
  1933. tiff(4)
  1934. #c%=dir%+2+Z%*12
  1935.  284:planar%=V%:
  1936.  planar%=2 input=quant%
  1937.  290:greyunit=10^V%
  1938.  291:
  1939. #c%=V%:
  1940.  I%=0
  1941. C%-1:r%(I%)=
  1942. tiff(D%)/greyunit/2*F:
  1943. g%()=r%():b%()=r%()
  1944. #c%=dir%+2+Z%*12
  1945.  296:resunit=V%
  1946.  317:hpredict%=V%
  1947.  320:
  1948. #c%=V%:
  1949.  I%=0
  1950. C%/3-1:r%(I%)=
  1951. tiff(3)/65535*F:
  1952.  I%=0
  1953. C%/3-1:g%(I%)=
  1954. tiff(3)/65535*F:
  1955.  I%=0
  1956. C%/3-1:b%(I%)=
  1957. tiff(3)/65535*F:
  1958. #c%=dir%+2+Z%*12
  1959.  info% 
  1960. "Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V%
  1961.  st%(stc%):
  1962.  stc%>1 
  1963. #c%=stv%:
  1964.  I%=0
  1965. stc%-1:st%(I%)=
  1966. tiff(std%):
  1967. st%(0)=stv%
  1968.  compression 
  1969.  0,1:info$=""
  1970.  2:info$="CCITT Group 3 compressed "
  1971.  5:info$="LZW compressed ":r$="FN1505"
  1972.  hpredict%=2 
  1973.  info$+="horizontal differenced " 
  1974.  hpredict%>2 info$+=" unknown predictor ("+
  1975.  hpredict%+") "
  1976. 'setcodes%=8:clearcode%=1<<setcodes%
  1977.  table%(1<<12):stk%=
  1978. dim(1<<13):buf%=
  1979. dim(280)
  1980.  I%=0
  1981. clearcode%-1:table%(I%)=I%:
  1982.  32773:info$="PackBits compressed ":r$="FN1501"
  1983.  6:info$="JPEG compressed "
  1984.  info$="Compress "+
  1985.  compression+" - unknown "
  1986. Dinfo$+="TIFF file, "+
  1987.  sx%+" by "+
  1988.  sy%+" pixels, "+
  1989. bits(input)
  1990. Tbigendianbits=fillorder=1:
  1991. #c%=st%(0):stripptr=0:
  1992.  striprows%>=sy% striprows%=-1
  1993.  input 
  1994.  1:rowbytes%=sx%+7>>3
  1995.  2:rowbytes%=sx%+3>>2
  1996.  4:rowbytes%=sx%+1>>1
  1997.  8:rowbytes%=sx%
  1998.  24:rowbytes%=3*sx%
  1999.  32:rowbytes%=4*sx%:
  2000.  photometric<>5 
  2001.  42,"32 bpp TIFF but not CMYK"
  2002.  42,"Can't do "+
  2003. bits(input)+" TIFF"
  2004.  planar%=2 rowbytes%=rowbytes%*sampperpix%
  2005.  planar%<>1 
  2006.  rgb<>0 
  2007. 42,"Can't do this style of TIFF yet" 
  2008.  planar%=
  2009.  compression<2 
  2010. +Tcache%=
  2011. :stripptr=-1:r$="FN8":
  2012.  input=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24"
  2013.  input=32 rbo%=0:gbo%=1:bbo%=2:step24=4:r$="FN24":r%()=F-r%():g%()=F-g%():b%()=F-b%():input=24
  2014.  compression=5 
  2015. compression=32773 
  2016. /-cache%=
  2017. :cachebytes%=rowbytes%*striprows%
  2018. 00plbuff%=
  2019. dim(rowbytes%):rowstogo%=striprows%
  2020.  input=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+
  2021. r$,3)+10):step24=3:rbo%=-1
  2022. 3.buff%=
  2023. dim(rowbytes%):rowstogo%=striprows%
  2024.  input=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+
  2025. r$,3)+10):step24=3
  2026.  scale% 
  2027. S%=resunit:
  2028.  S%=2 S%=90
  2029.  S%=3 S%=35
  2030. :,xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S%
  2031. ;,ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S%
  2032.  r$="FN1500" r$="FN8"
  2033.  1600
  2034. #c%=12:camg=0:planar%=
  2035. @*S$=
  2036. #c%:S%=
  2037.  "BMHD":sx%=
  2038. beHW:sy%=
  2039. beHW:S%=
  2040. W:planes%=
  2041. #c%:masking%=
  2042. #c%=1
  2043. C6compression=
  2044. #c%:S%=
  2045. HW:U%=
  2046. #c%:V%=
  2047. #c%:S%=
  2048.  scale% ymul%=ymul%*V%:ydiv%=ydiv%*U%
  2049.  I%=0
  2050. (1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:
  2051. :g%()=r%():b%()=r%()
  2052.  "CMAP":S%=
  2053. #c%+S%:
  2054.  I%=0
  2055. (1<<planes%)-1:r%(I%)=(
  2056. #c%>>4)/15*F
  2057. G1g%(I%)=(
  2058. #c%>>4)/15*F:b%(I%)=(
  2059. #c%>>4)/15*F:
  2060. #c%=S%:
  2061.  info% 
  2062. "Warning: truncated IFF CMAP information to 4 bits"
  2063.  "CAMG":camg=
  2064.  info% 
  2065. "Amiga viewport mode ";~camg
  2066.  "BODY":st%=
  2067.  info% 
  2068. "Ignoring IFF property "S$" size ";S%
  2069. #c%+S%
  2070.  S$="BODY":
  2071.  compression info$="Compressed " 
  2072.  info$=""
  2073. O,ham=(camg 
  2074.  &800)<>0:
  2075.  ham info$+="HAM "
  2076. P5half=(camg 
  2077.  &80)<>0:
  2078.  half info$+="half-bright "
  2079.  half half%=1<<planes%-1:
  2080.  I%=0
  2081. half%-1:r%(I%+half%)=r%(I%)/2:g%(I%+half%)=g%(I%)/2:b%(I%+half%)=b%(I%)/2:
  2082. REinfo$+="IFF file, "+
  2083.  sx%+" by "+
  2084.  sy%+" pixels, "+
  2085. bits(planes%)
  2086.  masking% info$+=" with mask (ignored)"
  2087. T7rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%
  2088. U9pbuff%=
  2089. dim(sx%):r$="FN"+
  2090. (1600+compression):cache%=
  2091.  compression 
  2092. W(cachebytes%=
  2093. :plbuff%=
  2094. dim(plbytes%)
  2095. YRrealrowbytes%=rowbytes%:rowbytes%=plbytes%:
  2096.  masking% rowbytes%+=realrowbytes%
  2097. #c%=st%
  2098.  1700
  2099. ]Bsx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=
  2100. ^3buff%=
  2101. dim(80*4):pbuff%=
  2102. dim(640):G=F/3:H=F*2/3
  2103. _(r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F
  2104. `(g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F
  2105. a(b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F
  2106. bVmasking%=
  2107. :r$="FN1600":st%=16:
  2108. #c%=16:cache%=
  2109. :realrowbytes%=80:rowbytes%=plbytes%
  2110. cSinfo$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)"
  2111.  1800
  2112. e?sx%=72*8:sy%=720:quant%=1:input=1:
  2113. #c%=st%:plbuff%=
  2114. dim(72)
  2115. cache%=
  2116. :cachebytes%=
  2117. gQr%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=
  2118. :rowbytes%=72:r$="FN1501":rowstogo%=-1
  2119.  scale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72
  2120. i>info$="MacPaint file, 576 by 720 bits, creator id "+
  2121. S$,4)
  2122.  1850
  2123. #c%=552
  2124. done%=
  2125. code%=
  2126. beHW:
  2127.  code% 
  2128.  &01:
  2129. rCrowbytes%=
  2130. beHW:
  2131. (rowbytes% 
  2132. &8000)=0 
  2133. 42,"PICT without Pixmap"
  2134. s3sy%=
  2135. beHW:sx%=
  2136. beHW:sy%=
  2137. beHW-sy%:sx%=
  2138. beHW-sx%
  2139. t<junk%=
  2140. HW:packtype%=
  2141. beHW:junk%=
  2142. W:resx%=
  2143. beW:resy%=
  2144. beHW<>0 
  2145. 42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky"
  2146. v&bpp%=
  2147. beHW:junk%=
  2148. beHW:junk%=
  2149. w$junk%=
  2150. beW:junk%=
  2151. beW:junk%=
  2152. junk%=
  2153. beW:junk%=
  2154. y`C%=
  2155. beHW:
  2156.  I%=0
  2157. C%:J%=
  2158. beHW:r%(J%)=
  2159. beHW/65535*F:g%(J%)=
  2160. beHW/65535*F:b%(J%)=
  2161. beHW/65535*F:
  2162. done%=
  2163.  &9A:junk%=
  2164. W:rowbytes%=
  2165. beHW:
  2166. (rowbytes% 
  2167. &8000)=0 
  2168. 42,"PICT without Pixmap"
  2169. |3sy%=
  2170. beHW:sx%=
  2171. beHW:sy%=
  2172. beHW-sy%:sx%=
  2173. beHW-sx%
  2174. }<junk%=
  2175. HW:packtype%=
  2176. beHW:junk%=
  2177. W:resx%=
  2178. beW:resy%=
  2179. beHW<>16 
  2180. 42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect"
  2181. 'bpp%=
  2182. beHW:comps%=
  2183. beHW:junk%=
  2184. junk%=
  2185. beW:junk%=
  2186. junk%=
  2187. beHW:junk%=
  2188.  bpp%>16 
  2189. nopal 
  2190.  J%=2^(bpp%
  2191.  I%=0
  2192. J%-1:r%(I%)=I%/(J%-1)*F:
  2193. :g%()=r%():b%()=r%()
  2194.  bpp%=32 
  2195.  comps%=3 bpp%=24:rowbytes%=3*sx%
  2196. done%=
  2197. 42,"ChangeFSI can't understand Mac PICT2 code "+
  2198. ~code%
  2199.  done%
  2200. 3junk%=
  2201. beHW:junk%=
  2202. beHW:junk%=
  2203. beHW:junk%=
  2204. 3junk%=
  2205. beHW:junk%=
  2206. beHW:junk%=
  2207. beHW:junk%=
  2208. junk%=
  2209. Ncache%=
  2210. :cachebytes%=
  2211. :bigendianbits=
  2212. :st%=
  2213. #c%:rowbytes%=rowbytes%
  2214. &8000
  2215.  scale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy%
  2216. Binfo$="Mac PICT2, "+
  2217.  sx%+" by "+
  2218.  sy%+" pixels, "+
  2219. bits(bpp%)
  2220. &plbuff%=
  2221. dim(rowbytes%):
  2222.  bpp%>8 
  2223. Trbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24
  2224.  comps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2
  2225.  1900
  2226. #c%=1:C%=
  2227.  E%<>1 
  2228.  42,"ZSoft .PCX file with unknown encoding"
  2229. #c%:sx%=
  2230. HW:sy%=
  2231. HW:sx%=
  2232. HW+1-sx%:sy%=
  2233. HW+1-sy%
  2234.  scale% xmul%=xmul%*90:xdiv%=xdiv%*
  2235. HW:ymul%=ymul%*90:ydiv%=ydiv%*
  2236. #c%=65:planes%=
  2237. #c%:planar%=planes%>1:rowbytes%=
  2238. HW:bpp%=E%*planes%
  2239. pcxpal=16:
  2240.  bpp%>4 
  2241.  C%=5 
  2242. #c%-769:
  2243. #c%=12 pcxpal=
  2244. #c%-768
  2245. #c%=pcxpal:E%=0:
  2246.  C%=0
  2247. (1<<bpp%)*3-1:E%=E%
  2248.  info% 
  2249. ".PCX palette mask established at ";~E%
  2250.  E%=0 
  2251.  C%=0
  2252. (1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:
  2253. :g%()=r%():b%()=r%()
  2254. #c%=pcxpal:
  2255.  C%=0
  2256. (1<<bpp%)-1
  2257. Er%(C%)=(
  2258. E%)/E%*F:g%(C%)=(
  2259. E%)/E%*F:b%(C%)=(
  2260. E%)/E%*F
  2261. rewind
  2262. Lplbytes%=rowbytes%*planes%:plbuff%=
  2263. dim(plbytes%):cache%=
  2264. :cachebytes%=
  2265.  planar% pbuff%=
  2266. dim(sx%) 
  2267.  input=bpp%:bigendianbits=
  2268. :r$="FN1100"
  2269. Hinfo$="ZSoft .PCX file, "+
  2270.  sx%+" by "+
  2271.  sy%+" pixels, "+
  2272. bits(bpp%)
  2273.  2000
  2274. #c%=0:L%=
  2275. #c%:C%=
  2276. #c%:I%=
  2277. #c%:J%=
  2278. HW:K%=
  2279. HW:M%=
  2280. Dsx%=
  2281. W:sx%=
  2282. HW:sy%=
  2283. HW:B%=
  2284. #c%:ID%=
  2285. &10 hflip%=
  2286. hflip%
  2287. (ID% 
  2288. &20)=0 vflip%=
  2289. vflip%
  2290. #c%+L%:
  2291.  M%=&18 
  2292.  C%=J%
  2293. 9b%(C%)=
  2294. #c%/255*F:g%(C%)=
  2295. #c%/255*F:r%(C%)=
  2296. #c%/255*F
  2297. nopal
  2298.  1,2,3:cache%=
  2299.  B%>8 
  2300.  B%>16 
  2301. Linput=24:bbo%=0:gbo%=1:rbo%=2:step24=B%
  2302. 8:r$="FN24":rowbytes%=step24*sx%
  2303. rowbytes%=sx%*2
  2304.  rpal%(255),gpal%(255):input=16:step24=2:r$="FN16"
  2305.  C%=0
  2306. &gpal%(C%)=(C%>>5)<<8 
  2307. 31)<<16
  2308. %rpal%(C%)=(C%>>2)
  2309. 3)<<11
  2310.  C%=0
  2311. 31:r%(C%)=C%/31*F:
  2312. :g%()=r%():b%()=r%()
  2313. r$="FN8":rowbytes%=sx%
  2314. Kinfo$="Truevision TGA image, "+
  2315.  sx%+" by "+
  2316.  sy%+" pixels, "+
  2317. bits(B%)
  2318.  9,10,11:step24=B%
  2319. 8:rowbytes%=step24*sx%:buff%=
  2320. dim(rowbytes%)
  2321.  B%>8 
  2322.  B%>16 
  2323. :input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002"
  2324.  rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001"
  2325.  C%=0
  2326. &gpal%(C%)=(C%>>5)<<8 
  2327. 31)<<16
  2328. %rpal%(C%)=(C%>>2)
  2329. 3)<<11
  2330.  C%=0
  2331. 31:r%(C%)=C%/31*F:
  2332. :g%()=r%():b%()=r%()
  2333. Oinfo$="Truevision TGA RLE image, "+
  2334.  sx%+" by "+
  2335.  sy%+" pixels, "+
  2336. bits(B%)
  2337.  2100
  2338. ?quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=
  2339. :r$="FN16"
  2340.  rpal%(255),gpal%(255):input=16:step24=2
  2341.  C%=0
  2342.  gpal%(C%)=C%>>3 
  2343. 7)<<11
  2344. %rpal%(C%)=(C%
  2345. 7)<<8 
  2346.  (C%>>3)<<16
  2347.  C%=0
  2348. 31:r%(C%)=C%/31*F:
  2349. :b%()=r%()
  2350.  C%=0
  2351. 63:g%(C%)=C%/63*F:
  2352.  scale% ymul%=ymul%*2
  2353. Hinfo$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":
  2354. #c%=7
  2355.  2200
  2356. 9quant%=8:step24=1:
  2357. #c%=0:s$=
  2358. #c%:E%=
  2359. s$,":"):st%=
  2360. ;sx%=
  2361. s$,E%+1):sy%=
  2362. s$,E%+2+
  2363.  sx%):
  2364. nopal:input=24
  2365. Arowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=
  2366. :r$="FN24"
  2367. Iinfo$="Irlam image, "+
  2368.  sx%+" by "+
  2369.  sy%+" pixels, 24 bits per pixel"
  2370.  2250
  2371. #c%=16:sx%=
  2372. W:sy%=
  2373.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2374.  C%=0
  2375. 255:D%=C%
  2376. table%(C%)=(D%-16)/219*F
  2377. 128 D%-=256
  2378. )r%(C%)=
  2379. (D%/160*F):b%(C%)=
  2380. (D%/126*F)
  2381. >g%(C%)=
  2382. (-D%/160*rwt/gwt*F):gpal%(C%)=
  2383. (-D%/126*bwt/gwt*F)
  2384. ,table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  2385. 5st%=32:
  2386. #c%=32:cache%=
  2387. :rowbytes%=2*sx%:input=411
  2388. >info$="Irlam YUV 4:1:1 file "+
  2389.  sx%+" by "+
  2390.  sy%+" pixels"
  2391.  2300
  2392. #c%=6:sx%=
  2393. HW:sy%=
  2394. HW:D%=
  2395. #c%:ncolors%=
  2396. #c%:input=24
  2397. ;vflip%=
  2398. vflip%:quant%=
  2399. #c%:ncmap%=
  2400. #c%:cmaplen%=1<<
  2401. nopal:back%=
  2402. dim(4):!back%=0
  2403. clrfirst%=D%
  2404. 2)=0 
  2405.  I%=0
  2406. ncolors%-1:back%?I%=
  2407. (ncolors%
  2408. 1)=0 
  2409. 4 alpha%=
  2410. dim(sx%)
  2411.  ncmap%>0 
  2412.  I%=0
  2413. cmaplen%-1:r%(I%)=
  2414. HW/&FF00*F:
  2415.  I%=0
  2416. cmaplen%-1:g%(I%)=
  2417. HW/&FF00*F:
  2418.  I%=0
  2419. cmaplen%-1:b%(I%)=
  2420. HW/&FF00*F:
  2421. #c%+1
  2422. Hst%=
  2423. #c%:buff%=
  2424. dim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx%
  2425. rewind
  2426. Rinfo$="Utah rle image, "+
  2427.  sx%+" by "+
  2428.  sy%+" pixels, "+
  2429. bits(ncolors%*quant%)
  2430.  2400
  2431. #c%=riffoff%+&0a:st%=
  2432. W:pal%=
  2433. W:sx%=
  2434. W:sy%=
  2435.  pal% 
  2436. #c%=riffoff%+&18:input=
  2437. HW:compression=0
  2438. #c%=riffoff%+&1c:input=
  2439. HW:compression=
  2440. #c%=riffoff%+&26:xppm=
  2441. W:yppm=
  2442.  (xppm<>0 
  2443.  yppm<>0 
  2444.  scale%<>0) 
  2445. %xdiv%=xdiv%*xppm:xmul%=xmul%*3543
  2446. %ydiv%=ydiv%*yppm:ymul%=ymul%*3543
  2447.  42,"Unknown .BMP variant ("+
  2448.  pal%+")"
  2449. "bigendianbits=
  2450. :vflip%=
  2451. vflip%
  2452.  input 
  2453.  1:rowbytes%=sx%+7>>3
  2454.  4:rowbytes%=sx%+1>>1
  2455.  8:rowbytes%=sx%
  2456.  16:rowbytes%=sx%*2:r$="FN16":step24=2
  2457.  rpal%(255),gpal%(255)
  2458. %rmask%=&7c00:gmask%=42:bmask%=-42
  2459.  compression=3 
  2460. #c%=riffoff%+14+pal%:rmask%=
  2461. W:gmask%=
  2462. W:bmask%=
  2463. W:compression=0
  2464.  rmask%=&7c00 
  2465.  C%=0
  2466.  &gpal%(C%)=(C%>>5)<<8 
  2467. 31)<<16
  2468. !%rpal%(C%)=(C%>>2)
  2469. 3)<<11
  2470.  C%=0
  2471. 31:r%(C%)=C%/31*F:
  2472. :g%()=r%():b%()=r%()
  2473.  rmask%=&f800 
  2474.  C%=0
  2475. '&gpal%(C%)=(C%>>5)<<8 
  2476. 31)<<16
  2477. (%rpal%(C%)=(C%>>3)
  2478. 7)<<11
  2479.  C%=0
  2480. 31:r%(C%)=C%/31*F:
  2481. :b%()=r%()
  2482.  C%=0
  2483. 63:g%(C%)=C%/63*F:
  2484.  24,32
  2485. ."rbo%=2:gbo%=1:bbo%=0:r$="FN24"
  2486.  C%=0
  2487. 255:r%(C%)=C%/255*F:
  2488. :g%()=r%():b%()=r%()
  2489. 01r$="FN24":step24=input/8:rowbytes%=sx%*step24
  2490. 1"rmask%=-1:gmask%=42:bmask%=-42
  2491.  compression=3 
  2492. #c%=riffoff%+14+pal%:rmask%=
  2493. W:gmask%=
  2494. W:bmask%=
  2495. W:compression=0
  2496.  rmask%=&FF 
  2497.  rbo%=0:gbo%=1:bbo%=2
  2498.  gmask%=&FF 
  2499.  gbo%=0:bbo%=1:rbo%=2
  2500.  bmask%=&FF 
  2501.  bbo%=0:gbo%=1:rbo%=2
  2502. input=24
  2503.  42,".BMP file of unusual depth ("+
  2504.  input+")"
  2505.  input<=8 
  2506. #c%=riffoff%+14+pal%:r$="FN8"
  2507.  C%=0
  2508. 2^input-1
  2509. <@b%(C%)=
  2510. #c%/255*F:g%(C%)=
  2511. #c%/255*F:r%(C%)=
  2512. #c%/255*F:
  2513.  compression 
  2514.  0:info$="Uncompressed "
  2515.  1:info$="RLE8 compressed ":r$="FN2401"
  2516.  2:info$="RLE4 compressed ":r$="FN2402"
  2517.  42,".BMP compression type not supported ("+
  2518.  compression+")"
  2519. rowbytes%=rowbytes%+3
  2520.  compression<>0 cachebytes%=
  2521. :plbuff%=
  2522. dim(rowbytes%)
  2523. cache%=
  2524. #c%=riffoff%+st%
  2525. HQinfo$+="Windows 3.0 .BMP image, "+
  2526.  sx%+" by "+
  2527.  sy%+" pixels, "+
  2528. bits(input)
  2529.  2500
  2530. #c%=0:s$="":C%=
  2531.  C%<>0 s$+=
  2532.  C%:C%=
  2533. K8s$+=" version "+
  2534. W:sx%=
  2535. W:sy%=
  2536. W:input=
  2537. W:cache%=
  2538. Lainfo$="!Translator Clear format made by "+s$+", "+
  2539.  sx%+" by "+
  2540.  sy%+" pixels, "+
  2541. bits(input)
  2542.  input>8 
  2543. nopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24"
  2544.  C%=0
  2545. 2^input-1
  2546. Q9r%(C%)=
  2547. #c%/255*F:g%(C%)=
  2548. #c%/255*F:b%(C%)=
  2549. #c%/255*F
  2550. S"input=8:r$="FN8":rowbytes%=sx%
  2551.  2600
  2552. #c%=0:C%=
  2553.  0:sx%=320:sy%=200:planes%=4
  2554.  1:sx%=640:sy%=200:planes%=2
  2555.  2:sx%=640:sy%=400:planes%=1
  2556. 42,"ChangeFSI knows nothing of "+
  2557.  C%+" type Degas files"
  2558.  I%=0
  2559. (1<<input)-1:D%=
  2560. beHW:r%(I%)=(D%>>8
  2561. 7)/7*F:g%(I%)=(D%>>4
  2562. 7)/7*F:b%(I%)=(D%
  2563. 7)/7*F:
  2564. _<cache%=
  2565. :planar%=
  2566. :masking%=
  2567. :st%=34:
  2568. #c%=34:r$="FN1600"
  2569. `Hrowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=
  2570. dim(sx%)
  2571. 128 r$="FN1601":flag=1600:cachebytes%=
  2572. :plbuff%=
  2573. dim(plbytes%) 
  2574.  realrowbytes%=2:rowbytes%=plbytes%
  2575. bEinfo$="Degas file "+
  2576.  sx%+" by "+
  2577.  sy%+" pixels, "+
  2578. bits(planes%)
  2579.  2700
  2580. #c%=4:sx%=
  2581. HW:sy%=
  2582.  &AF:rowbytes%=sx%:cache%=
  2583. :r$="FN8":st%=&30A
  2584.  42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!"
  2585.  C%=0
  2586. 2^input-1
  2587. j6r%(C%)=
  2588. #c%/63*F:g%(C%)=
  2589. #c%/63*F:b%(C%)=
  2590. #c%/63*F
  2591. #c%=st%
  2592. mEinfo$="ColoRIX file "+
  2593.  sx%+" by "+
  2594.  sy%+" pixels, "+
  2595. bits(input)
  2596.  2800
  2597. #c%=0:
  2598. fits:
  2599. s$,8) 
  2600.  "SIMPLE  ":
  2601. s$,30,1)<>"T" 
  2602. 42,"ChangeFSI can only read Simple FITS format"
  2603.  "BITPIX  ":input=
  2604. s$,10)
  2605.  "NAXIS   ":
  2606. s$,10)<>2 
  2607. 42,"ChangeFSI can only read 2d FITS images"
  2608.  "NAXIS1  ":sx%=
  2609. s$,10)
  2610.  "NAXIS2  ":sy%=
  2611. s$,10)
  2612.  "END     "
  2613.  info% 
  2614. "Ignoring FITS record "s$
  2615. s$,8)="END     "
  2616. y.st%=(
  2617. 2880 + 1)*2880:cache%=
  2618. #c%=st%
  2619.  input 
  2620.  8:r$="FN8":rowbytes%=sx%:
  2621. nopal
  2622.  16:rowbytes%=2*sx%:
  2623.  rpal%(255),gpal%(255):step24=2:r$="FN16"
  2624.  C%=0
  2625. gpal%(C%)=C%<<8
  2626. rpal%(C%)=C%
  2627. :cheat%=0:
  2628.  invert% cheat%=F
  2629.  C%=0
  2630. 255:r%(C%)=cheat%+C%/65535*F:g%(C%)=((C%
  2631. &80)<<8)/65535*F:b%(C%)=cheat%:
  2632. :rwt=1:gwt=1:bwt=1
  2633.  42,"ChangeFSI can't read a FITS image with this number of bits per pixel"
  2634. Binfo$="FITS file "+
  2635.  sx%+" by "+
  2636.  sy%+" pixels, "+
  2637. bits(input)
  2638.  2900
  2639. #c%=4:sx%=
  2640. beHW:sy%=
  2641. beHW:
  2642. #c%=&42:input=
  2643. beHW:C%=
  2644. =rowbytes%=
  2645. beHW:C%=
  2646. beW:st%=
  2647. #c%=st%:r$="FN8":
  2648. nopal
  2649.  rpal%(15),gpal%(15),bpal%(15)
  2650. Irpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0
  2651. Igpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0
  2652. Ibpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0
  2653.  C%=&80
  2654. &8F:r%(C%)=rpal%(C%-&80)/255*F:g%(C%)=gpal%(C%-&80)/255*F:b%(C%)=bpal%(C%-&80)/255*F:
  2655. :cache%=
  2656. Hinfo$="Apollo GPR file "+
  2657.  sx%+" by "+
  2658.  sy%+" pixels, "+
  2659. bits(input)
  2660.  3000
  2661. Hsx%=720:sy%=
  2662. #c%/1440:
  2663.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2664.  C%=0
  2665. table%(C%)=(C%-16)/219*F
  2666. >r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F
  2667. ?g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F
  2668. =b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F
  2669.  C%=0
  2670. table%(C%)=(C%-16)/219*F
  2671. 5r%(C%)=
  2672. ((C%-128)/160*F):b%(C%)=
  2673. ((C%-128)/126*F)
  2674. Jg%(C%)=
  2675. (-(C%-128)/160*rwt/gwt*F):gpal%(C%)=
  2676. (-(C%-128)/126*bwt/gwt*F)
  2677. <table%()=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2678. :st%=0:
  2679. #c%=0:cache%=
  2680. :rowbytes%=1440:input=422:gamma=1
  2681.  scale% ymul%=ymul%*2
  2682. <info$="CCIR601 4:2:2 file "+
  2683.  sx%+" by "+
  2684.  sy%+" pixels"
  2685.  3100
  2686. $quant%=8:
  2687. #c%=0:a$=
  2688. #c%:st%=
  2689. !sx%=
  2690.  a$:sy%=
  2691. a$," ")))
  2692. nopal:input=24:step24=3:rowbytes%=sx%*3
  2693. 4rbo%=0:gbo%=1:bbo%=2:cache%=
  2694. :flag=700:r$="FN24"
  2695. Sinfo$="!RayShade 'RGB' image, "+
  2696.  sx%+" by "+
  2697.  sy%+" pixels, 24 bits per pixel"
  2698.  3200
  2699. quant%=8:
  2700. #c%=0:st%=0
  2701. s$,"_")+1,1)
  2702.  sx% 
  2703.  5:sx%=768:sy%=512
  2704.  2:sx%=3072:sy%=2048
  2705.  1:sx%=1536:sy%=1024
  2706. nopal:input=24:step24=3:rowbytes%=sx%*3
  2707. 4rbo%=0:gbo%=1:bbo%=2:cache%=
  2708. :flag=700:r$="FN24"
  2709. Ninfo$="Kodak /RGB image, "+
  2710.  sx%+" by "+
  2711.  sy%+" pixels, 24 bits per pixel"
  2712.  3300
  2713. #c%=0:input=
  2714. GET,2)
  2715. GET:sx%=
  2716.  s$:sy%=
  2717. s$," ")):
  2718.  sy%=0 sy%=
  2719. cache%=
  2720.  input 
  2721.  4:input=1:r$="FN8":r%(0)=F:g%()=r%():b%()=r%():bigendianbits=
  2722. rowbytes%=(sx%+7)
  2723.  5:input=8:r$="FN8":E%=
  2724.  C%=0
  2725. E%:r%(C%)=C%/E%*F:
  2726. :g%()=r%():b%()=r%():rowbytes%=sx%
  2727.  6:input=24:r$="FN24":E%=
  2728. GET:step24=3:rbo%=0:gbo%=1:bbo%=2
  2729.  C%=0
  2730. E%:r%(C%)=C%/E%*F:
  2731. :g%()=r%():b%()=r%():rowbytes%=sx%*3
  2732.  8:input=24:r$="FN24":E%=
  2733. GET:step24=4:rbo%=0:gbo%=1:bbo%=2
  2734.  C%=0
  2735. E%:r%(C%)=C%/E%*F:
  2736. :g%()=r%():b%()=r%():rowbytes%=sx%*4
  2737. #c%:flag=700
  2738. Dinfo$+="pbm image, "+
  2739.  sx%+" by "+
  2740.  sy%+" pixels, "+
  2741. bits(input)
  2742. s$,1)<>"#":=s$
  2743.  3400
  2744. #c%=0:s$=
  2745. GET:input=16:quant%=5
  2746. GET:sx%=
  2747.  s$:sy%=
  2748. s$," ")):s$=
  2749.  rpal%(255),gpal%(255):input=16:step24=2
  2750.  C%=0
  2751. "gpal%(C%)=(C%>>5)<<8 
  2752. +rpal%(C%)=((C%>>2)
  2753. 31)<<16 
  2754. 3)<<11
  2755. cache%=
  2756. :r$="FN16"
  2757.  C%=0
  2758. 31:r%(C%)=C%/31*F:
  2759. :g%()=r%():b%()=r%()
  2760. %rowbytes%=sx%*2:st%=
  2761. #c%:flag=700
  2762. Cinfo$="p15 image, "+
  2763.  sx%+" by "+
  2764.  sy%+" pixels, "+
  2765. bits(input)
  2766.  3410
  2767. #c%=0:s$=
  2768. GET:input=16:quant%=5
  2769. GET:sx%=
  2770.  s$:sy%=
  2771. s$," ")):s$=
  2772.  rpal%(255),gpal%(255):input=16:step24=2
  2773.  C%=0
  2774. "gpal%(C%)=(C%>>4)<<8 
  2775. rpal%(C%)=(C%
  2776. 15)<<16
  2777. cache%=
  2778. :r$="FN16"
  2779.  C%=0
  2780. 15:r%(C%)=C%/15*F:
  2781. :g%()=r%():b%()=r%()
  2782. %rowbytes%=sx%*2:st%=
  2783. #c%:flag=700
  2784. Cinfo$="p14 image, "+
  2785.  sx%+" by "+
  2786.  sy%+" pixels, "+
  2787. bits(input)
  2788.  3450
  2789. #c%=0:info$=
  2790. 4ybits%=
  2791. info$,
  2792. info$," ")):ymax%=(1<<ybits%)-1
  2793. ;ubits%=
  2794. info$,
  2795. info$,"Y ")+1):umax%=(1<<(ubits%-1))-1
  2796. ;vbits%=
  2797. info$,
  2798. info$,"U ")+1):vmax%=(1<<(vbits%-1))-1
  2799. GET:sx%=
  2800.  s$:sy%=
  2801. s$," "))
  2802.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2803.  C%=0
  2804. ymax%:table%(C%)=C%/ymax%*F:
  2805. D%=(1<<ubits%)-1
  2806.  C%=0
  2807. D%:d=C%/umax%:
  2808.  d>1 d=-(D%-C%)/umax%
  2809. ;b%(C%)=
  2810. (d*(1-bwt)*F):gpal%(C%)=
  2811. (-d*(1-bwt)*bwt/gwt*F)
  2812. D%=(1<<vbits%)-1
  2813.  C%=0
  2814. D%:d=C%/vmax%:
  2815.  d>1 d=-(D%-C%)/vmax%
  2816. 8r%(C%)=
  2817. (d*(1-rwt)*F):g%(C%)=
  2818. (-d*(1-rwt)*rwt/gwt*F)
  2819. ;rowbytes%=sx%*2:st%=
  2820. #c%:cache%=
  2821. :r$="FN2250":input=555
  2822. ,info$+=", "+
  2823.  sx%+" by "+
  2824.  sy%+" pixels"
  2825.  3500
  2826. Aquant%=1:
  2827. #c%=6:E%=
  2828. HW:sx%=
  2829. HW:sx%=
  2830. HW:sy%=
  2831. HW:st%=
  2832. HW:st%=
  2833. 4rowbytes%=sx%/8+1
  2834. 1:cache%=
  2835. :st%+=
  2836. #c%=st%
  2837. ,r$="FN8":input=1:r%(0)=F:g%(0)=F:b%(0)=F
  2838. Minfo$="Pocketbook bitmap, "+
  2839.  sx%+" by "+
  2840.  sy%+" pixels, 1 bit per pixel"
  2841. 9planar%=
  2842. :planes%=2:r$="FN1600":input=8:cachebytes%=
  2843. ?r%(0)=F:r%(1)=(F/3)*2:r%(2)=F/3:r%(3)=0:g%()=r%():b%()=r%()
  2844. Hplbytes%=rowbytes%*planes%:buff%=
  2845. dim(plbytes%*sy%):pbuff%=
  2846. dim(sx%)
  2847. realrowbytes%=rowbytes%*sy%
  2848. Pinfo$="PocketbookII bitmap, "+
  2849.  sx%+" by "+
  2850.  sy%+" pixels, 2 bits per pixel"
  2851.  42,"Unknown Pocketbook PIC format"
  2852.  3600
  2853. Bpcdblk%=
  2854. dim(40):
  2855. &20023,"ChangeFSI$PCDindex",pcdblk%,20 
  2856.  pcdblk%?Z=13:pcdindex%=
  2857. $pcdblk% 
  2858.  pcdindex%=3
  2859. "PhotoCD_Open",1,c%,1 
  2860.  pcdh%:
  2861. "PhotoCD_GetCount",pcdh% 
  2862. (Z>>pcdindex%)=0 
  2863. 42,"Desired resolution unavailable"
  2864. "PhotoCD_GetRotation",pcdh% 
  2865. ,,pcdtr%
  2866. "PhotoCD_GetSize",pcdh%,,pcdindex% 
  2867. ,,,,sx%,sy%
  2868. )pcdblk%!0=0:pcdblk%!8=sx%:pcdblk%!4=0
  2869. 7pcdblk%!16=0:pcdblk%!20=2:pcdblk%!24=1:pcdblk%!28=3
  2870.  pcdtr% 
  2871.  &80000000:hflip%=
  2872. hflip%
  2873.  rotate% 
  2874.  0:rotate%=1
  2875.  -1:rotate%=0
  2876.  1:rotate%=0:vflip%=
  2877. vflip%:hflip%=
  2878. hflip%
  2879.  &8000005A
  2880.  rotate% 
  2881.  0:rotate%=1:vflip%=
  2882. vflip%
  2883.  -1:rotate%=0:vflip%=
  2884. vflip%
  2885.  1:rotate%=0:hflip%=
  2886. hflip%
  2887.  180:hflip%=
  2888. hflip%:vflip%=
  2889. vflip%
  2890.  &800000B4:vflip%=
  2891. vflip%
  2892.  rotate% 
  2893.  0:rotate%=-1
  2894.  1:rotate%=0
  2895.  -1:rotate%=0:vflip%=
  2896. vflip%:hflip%=
  2897. hflip%
  2898.  &8000010E
  2899.  rotate% 
  2900.  0:rotate%=-1:vflip%=
  2901. vflip%
  2902.  1:rotate%=0:vflip%=
  2903. vflip%
  2904.  -1:rotate%=0:hflip%=
  2905. hflip%
  2906.  PANIC
  2907. %@input=24:step24=3:rbo%=0:gbo%=1:bbo%=2:pcdcachesize%=32*1024
  2908. &Arowbytes%=sx%*3:
  2909. nopal:cache%=
  2910. :pcdcache%=
  2911. dim(pcdcachesize%)
  2912. 'Kinfo$="PhotoCD image, "+
  2913.  sx%+" by "+
  2914.  sy%+" pixels, 24 bits per pixel"
  2915.  3700
  2916. )3A%=
  2917. "<ChangeFSI$Dir>.CFSIjpeg":jpeg%=
  2918. 12,4,A%,jpeg%,
  2919. +Ddatacache%=
  2920. cachedim(
  2921. #c%):
  2922.  datacache%=-1 datacache%=
  2923. #c%=0:
  2924. 12,4,c%,datacache%,
  2925. -RA%=datacache%:B%=jpegblk%:C%=jpegblk%+4:D%=jpegblk%+8:E%=jpegblk%+12:
  2926.  jpeg%+8
  2927. .&B%=jpegblk%!12:jpegspace%=
  2928. dim(B%)
  2929. /'C%=datacache%:A%=jpegspace%:D%=
  2930.  jpeg%:cache%=
  2931. 42,"JPEG code error: "+
  2932. 15sx%=A%!20:sy%=A%!24:input=8*A%?28:
  2933. nopal:step24=4
  2934. 2Dinfo$="JFIF image, "+
  2935.  sx%+" by "+
  2936.  sy%+" pixels, "+
  2937. bits(input)
  2938. 3&jpegy%=sy%:r$="FN"+
  2939. (3700+input)
  2940.  3800
  2941. #c%=24:sx%=
  2942. W:sy%=
  2943.  scale% ymul%=ymul%*2
  2944.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2945.  C%=0
  2946.  C%<128 table%(C%)=C%/127*F
  2947. D%=C%:
  2948. 128 D%-=256
  2949. ;)r%(C%)=
  2950. (D%/160*F):b%(C%)=
  2951. (D%/126*F)
  2952. <>g%(C%)=
  2953. (-D%/160*rwt/gwt*F):gpal%(C%)=
  2954. (-D%/126*bwt/gwt*F)
  2955. #c%=52:st%=
  2956. #c%=64:cache%=
  2957. :rowbytes%=2*sx%:input=411
  2958. ?Hinfo$="Uncompressed Techno-I YUV file "+
  2959.  sx%+" by "+
  2960.  sy%+" pixels"
  2961.  3900
  2962. #c%=8:sx%=
  2963. W:sy%=
  2964. W:st%=16:quant%=12:step24=6
  2965.  C%=0
  2966. 4095:r%(C%)=C%/4095*F:
  2967. :g%()=r%():b%()=r%()
  2968. CDinput=48:rowbytes%=sx%*6:cache%=
  2969. :r$="FN24":rbo%=0:gbo%=2:bbo%=4
  2970. DRinfo$="Ronald Alpiar format, "+
  2971.  sx%+" by "+
  2972.  sy%+" pixels, 36 bits per pixel"
  2973.  3905
  2974. #c%=8:sx%=
  2975. W:sy%=
  2976. W:st%=16:quant%=16:step24=6
  2977.  C%=0
  2978. 65535:r%(C%)=C%/65535*F:
  2979. :g%()=r%():b%()=r%()
  2980. HDinput=48:rowbytes%=sx%*6:cache%=
  2981. :r$="FN24":rbo%=0:gbo%=2:bbo%=4
  2982. IRinfo$="Ronald Alpiar format, "+
  2983.  sx%+" by "+
  2984.  sy%+" pixels, 48 bits per pixel"
  2985. K?st%=0:
  2986. #c%=0:sx%=160:sy%=128:input=8:cache%=
  2987. :rowbytes%=sx%
  2988.  C%=0
  2989. 255:r%(C%)=C%/255*F:
  2990. :g%()=r%():b%()=r%():r$="FN8"
  2991. MNinfo$="The number of the beast, 160 by "+
  2992.  sy%+" pixels, 8 bits per pixel"
  2993.  info% 
  2994.  info$
  2995. "Hourglass_On",1:hour%=&406c4
  2996.  m=-9 
  2997.  m=-10 
  2998. "XOS_CLI","rmensure CompressJPEG 0 rmload System:Modules.jcompmod"
  2999. "XOS_CLI","rmensure CompressJPEG 0 IF ""<ChangeFSI$Dir>"" <> """" THEN rmload <ChangeFSI$Dir>.jcompmod"
  3000. TB*rmensure CompressJPEG 0 ERROR Can't find CompressJPEG module.
  3001.  invert% r%()=F-r%():g%()=F-g%():b%()=F-b%()
  3002.  xdiv% 
  3003. reduce(xmul%,xdiv%)
  3004.  ydiv% 
  3005. reduce(ymul%,ydiv%)
  3006.  -1:x%=256:y%=256:ncol=256:
  3007.  scaleo% xdiv%=xdiv%*2:ydiv%=ydiv%*2
  3008.  -2:x%=sx%:y%=sy%:
  3009.  spm=18 ncol=1 
  3010.  ncol=15
  3011.  -3,-5,-6:x%=sx%:y%=sy%:ncol=2^15-1
  3012.  -4,-7,-8:x%=sx%:y%=sy%:ncol=2^24-1
  3013.  -9,-10:x%=sx%:y%=sy%:ncol=2^24-1:
  3014.  m=-9 ncol=256
  3015. 53,m,4 
  3016.  ,,nx:
  3017. 53,m,5 
  3018.  ,,ny:nx=1<<nx:ny=1<<ny
  3019. 53,m,11 
  3020.  ,,x%:
  3021. 53,m,12 
  3022.  ,,y%:x%+=1:y%+=1
  3023. 53,m,3 
  3024.  ,,ncol:
  3025.  scaleo% 
  3026.  rotate% 
  3027. d!xdiv%=xdiv%*ny:ydiv%=ydiv%*nx
  3028.  xdiv% ymul%=ymul%*2
  3029.  ydiv% xmul%=xmul%*2
  3030. h!xdiv%=xdiv%*nx:ydiv%=ydiv%*ny
  3031.  xdiv% xmul%=xmul%*2
  3032.  ydiv% ymul%=ymul%*2
  3033. &62A51,m 
  3034.  r0;V:
  3035. 1)=0 
  3036.  r0=1 
  3037. ncol=255:
  3038.  m$<>"D" m$="R"
  3039.  m=-6 
  3040.  m=-7 
  3041.  m=-8 
  3042. t,nx=
  3043. pnm$,5):ny=
  3044. pnm$,
  3045. pnm$,",",5)+1)
  3046.  nx<>0 
  3047. ny=0 
  3048.  ny=nx
  3049.  nx=0 
  3050. ny=0 
  3051.  nx=90:ny=90
  3052.  scaleo% 
  3053.  rotate% 
  3054.  xdiv% ymul%=ymul%*nx
  3055.  ydiv% xmul%=xmul%*ny
  3056.  xdiv% xmul%=xmul%*nx
  3057.  ydiv% ymul%=ymul%*ny
  3058. !xdiv%=xdiv%*90:ydiv%=ydiv%*90
  3059.  rotate% 
  3060.  x%,y%
  3061.  xdiv%=0 xdiv%=sx%
  3062.  ydiv%=0 ydiv%=sy%
  3063.  xs$="=" xmul%=x%:xdiv%=sx%
  3064.  ys$="=" ymul%=y%:ydiv%=sy%
  3065.  lock% 
  3066.  xmul%/xdiv%>ymul%/ydiv% xmul%=ymul%:xdiv%=ydiv% 
  3067.  ymul%=xmul%:ydiv%=xdiv%
  3068.  ncol=1 
  3069. "C":xdiv%=xdiv%*4:ydiv%=ydiv%*4
  3070.  A%(16),B%(16)
  3071. A%()=0,&00000001,&08000001,&08000101,&08080101,&08080103,&0C080103,&0C080303,&0C0C0303,&0C0E0303,&0C0E0703,&0E0E0703,&0E0E0707,&0E0F0707,&0E0F0F07,&0F0F0F07,&0F0F0F0F
  3072. B%()=0,&00000008,&01000008,&01000808,&01010808,&0101080C,&0301080C,&03010C0C,&03030C0C,&03070C0C,&03070E0C,&07070E0C,&07070E0E,&070F0E0E,&070F0F0E,&0F0F0F0E,&0F0F0F0F
  3073. 2even_gard=
  3074. dim(17*32*4):odd_gard=
  3075. dim(17*32*4)
  3076.  I%=0
  3077.  J%=0
  3078. 16:even_gard!(J%*32*4+I%*4)=A%(I%)
  3079. B%(J%)<<4:
  3080.  I%=0
  3081.  J%=0
  3082. 16:odd_gard!(I%*32*4+J%*4)=B%(I%)
  3083. A%(J%)<<4:
  3084. "T":xdiv%=xdiv%*3:ydiv%=ydiv%*3
  3085.  A%(9),B%(9)
  3086. @A%()=0,&0001,&4001,&4041,&4043,&40C3,&60C3,&61C3,&71C3,&71C7
  3087. @B%()=0,&0004,&1004,&1104,&1106,&1186,&3186,&31C6,&71C6,&71C7
  3088. 2even_gard=
  3089. dim(10*16*4):odd_gard=
  3090. dim(10*16*4)
  3091.  I%=0
  3092.  J%=0
  3093. 9:even_gard!(J%*16*4+I%*4)=A%(I%)
  3094. B%(J%)<<3:
  3095.  I%=0
  3096.  J%=0
  3097. 9:odd_gard!(I%*16*4+J%*4)=B%(I%)
  3098. A%(J%)<<3:
  3099. "D":xdiv%=xdiv%*2:ydiv%=ydiv%*2
  3100.  A%(4),B%(4)
  3101. A%()=0,&1,&21,&31,&33
  3102. B%()=0,&2,&12,&32,&33
  3103. *even_gard=
  3104. dim(5*8):odd_gard=
  3105. dim(5*8)
  3106.  I%=0
  3107.  J%=0
  3108. 4:even_gard?(J%*8+I%)=A%(I%)
  3109. B%(J%)<<2:
  3110.  I%=0
  3111.  J%=0
  3112. 4:odd_gard?(I%*8+J%)=B%(I%)
  3113. A%(J%)<<2:
  3114. reduce(xmul%,xdiv%):
  3115. reduce(ymul%,ydiv%)
  3116.  xdiv%*ydiv%*255>2^32 xdiv%=xdiv%
  3117. 1:ydiv%=ydiv%
  3118. 1:xmul%=xmul%
  3119. 1:ymul%=ymul%
  3120.  xdiv%*ydiv%*255<2^32
  3121.  info% 
  3122. "Size ratios are x ";xmul%":"xdiv%" y "ymul%":"ydiv%
  3123. 9x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
  3124. order%=x%*y%>sx%*sy%
  3125. code%=
  3126. dim(8192):SP=13
  3127.  cache% 
  3128. cachesize(code%)
  3129.  cachebytes% 
  3130. ;filesize%=
  3131.  cache%>filesize% cache%=filesize%
  3132.  cachebytes%>0 
  3133.  cache%>cachebytes% cache%=cachebytes%
  3134. cacherows%=cache%
  3135. ?filesize%=sy%*rowbytes%:
  3136.  cache%<rowbytes% cache%=rowbytes%
  3137.  cache%>filesize% cache%=filesize%
  3138. Ecacherows%=striprows%:
  3139.  cacherows%<1 cacherows%=cache%
  3140.  rowbytes%
  3141. cache%=cacherows%*rowbytes%
  3142. Hdatacache%=
  3143. cachedim(cache%):
  3144.  datacache%=-1 datacache%=
  3145. dim(cache%)
  3146.  ncol=255 
  3147.  m$<>"D" m$="R"
  3148.  m$="R" 
  3149. (ncol=63 
  3150. m$="") 
  3151. 53,-1,3 
  3152. ,,J%:
  3153.  ncol=255 
  3154. =m J%=ncol
  3155.  ncol=63 
  3156. (m$=""
  3157. m$="R") J%=ncol
  3158.  J%<>ncol 
  3159. close:
  3160. 42,"You must be in a "+
  3161. (ncol+1)+" colour mode to do this"
  3162. J%=ncol:
  3163.  J%=63 J%=255
  3164. palette%=
  3165. dim((J%+1)*4)
  3166.  ncol=255 
  3167. "ColourTrans_ReadPalette",-1,-1,palette%,256*4
  3168.  I%=0
  3169. 255:palette%!(I%<<2)=palette%!(I%<<2)>>>8:
  3170.  ncol=63 
  3171.  I%=0
  3172. +palette%!(I%<<2)=(I%
  3173. 16)>>1)*17
  3174. /palette%?(I%<<2 
  3175. 1)=(I%
  3176. &60)>>3)*17
  3177. ;palette%?(I%<<2 
  3178. 2)=(I%
  3179. 8)>>1 
  3180. 128)>>4)*17
  3181.  I%=0
  3182. ncol:
  3183. "OS_ReadPalette",I%,16 
  3184.  ,,i%:palette%!(I%<<2)=i%>>>8:
  3185. :k%=palette%+1:nk%=palette%+2
  3186.  I%=0
  3187. ncol*4
  3188.  palette%?I%<>k%?I% 
  3189.  palette%?I%<>nk%?I% t%=
  3190.  ncol>16 
  3191.  t% m$="D"
  3192.  ncol=15 
  3193.  t% m$="T"
  3194.  m$="R" 
  3195.  sx%*xmul%/xdiv%*sy%*ymul%/ydiv%<200000 k%=3 
  3196.  k%=4
  3197. nk%=8-k%
  3198. t%=1<<nk%
  3199. mask%=t%-1
  3200. td2%=1<<nk%-1
  3201. step%=1<<(8-k%)
  3202. %ncol%=ncol+1:
  3203.  ncol%=64 ncol%=256
  3204. ict%=
  3205. dim(2^(k%*3)*4-1)
  3206.  cache%<8192*6 scratch%=
  3207. dim(8192*6):scratchsz%=8192*6 
  3208.  scratch%=datacache%:scratchsz%=cache%
  3209.  info% 
  3210. "Begin table generation with ";scratchsz%" bytes."
  3211.  Z%=0
  3212. P%=code%
  3213. [OPT Z%
  3214. .make%
  3215. MRS r4,CPSR
  3216. STMFD r13!,{r4,r14}
  3217. LDR r4,ict
  3218. MOV r2,#step%/2
  3219. .blueloop
  3220. MOV r1,#step%/2
  3221. .greenloop
  3222. MOV r0,#step%/2
  3223. .redloop
  3224. MOV r3,r0,LSR #nk%
  3225. MOV r14,r1,LSR #nk%
  3226. MOV r5,r2,LSR #nk%
  3227. R r3,r3,r14,LSL #k%
  3228. R r3,r3,r5,LSL #k%*2
  3229. BL devious
  3230. ADD r0,r0,#step%*2
  3231. CMP r0,#256
  3232. BCC redloop
  3233. ADD r1,r1,#step%
  3234. CMP r1,#256
  3235. BCC greenloop
  3236. ADD r2,r2,#step%
  3237. CMP r2,#256
  3238. BCC blueloop
  3239. LDMFD r13!,{r4,r14}
  3240. MSR CPSR_f,r4
  3241. MOV pc,r14
  3242. .ct DCD palette%
  3243. .min DCD code%+8192-256*2*4
  3244. .ict DCD ict%
  3245. .fsaad DCD scratch%
  3246. #.fsalim DCD scratch%+scratchsz%
  3247. .devious
  3248. MRS r6,CPSR
  3249. )STMFD r13!,{r0,r1,r2,r3,r4,r6,r8,r14}
  3250. BIC r0,r0,#(mask%<<1)+1 
  3251. BIC r1,r1,#mask%
  3252. BIC r2,r2,#mask%
  3253. MOV r5,#0
  3254. LDR r6,ct
  3255. MOV r9,#&ff0000
  3256. MOV r14,#&ff0000
  3257. LDR r12,min
  3258. .devloop
  3259. LDR r7,[r6,r5,LSL #2] 
  3260. MOV r8,r7,lsr #16 
  3261. BIC r10,r8,#mask% 
  3262. ADD r11,r2,#t% 
  3263. CMP r10,r2 
  3264. BEQ blueequal
  3265. SUBCC r10,r2,r8 
  3266. SUBCC r11,r11,r8 
  3267. SUBCS r10,r8,r11 
  3268. SUBCS r11,r8,r2 
  3269. MUL r3,r10,r10 
  3270. .doneblue
  3271. MUL r4,r11,r11 
  3272. MOV r8,r7,lsr #8
  3273.  r8,r8,#255 
  3274. BIC r10,r8,#mask% 
  3275. ADD r11,r1,#t% 
  3276. CMP r10,r1  
  3277. BEQ greenequal
  3278. SUBCC r10,r1,r8 
  3279. SUBCC r11,r11,r8 
  3280. SUBCS r10,r8,r11 
  3281. SUBCS r11,r8,r1 
  3282. MUL r8,r10,r10
  3283. ADD r8,r8,r8,LSL #2
  3284. ADD r3,r3,r8,LSL #1 
  3285. .donegreen
  3286. MUL r8,r11,r11
  3287. ADD r8,r8,r8,LSL #2
  3288. ADD r4,r4,r8,LSL #1 
  3289.  r8,r7,#255 
  3290. BIC r10,r8,#mask% 
  3291. ADD r11,r0,#t% 
  3292. CMP r10,r0 
  3293. BEQ redequal0
  3294. SUBCC r10,r0,r8 
  3295. SUBCC r11,r11,r8 
  3296. SUBCS r10,r8,r11 
  3297. SUBCS r11,r8,r0 
  3298. MUL r7,r10,r10
  3299. ADD r7,r7,r7,LSL #1
  3300. ADD r7,r3,r7 
  3301. STR r7,[r12,r5,LSL #2] 
  3302. .donered0
  3303. MUL r7,r11,r11
  3304. ADD r7,r7,r7,LSL #1
  3305. ADD r7,r4,r7 
  3306. CMP r7,r9 
  3307. MOVCC r9,r7 
  3308. ADD r7,r0,#t% 
  3309. BIC r10,r8,#mask% 
  3310. ADD r11,r7,#t% 
  3311. CMP r10,r7 
  3312. BEQ redequal1
  3313. SUBCC r10,r7,r8 
  3314. SUBCC r11,r11,r8 
  3315. SUBCS r10,r8,r11 
  3316. SUBCS r11,r8,r7 
  3317. MUL r7,r10,r10
  3318. ADD r7,r7,r7,LSL #1
  3319. ADD r3,r3,r7 
  3320. .donered1
  3321. ADD r7,r5,#ncol%
  3322. STR r3,[r12,r7,LSL #2] 
  3323. MUL r7,r11,r11
  3324. ADD r7,r7,r7,LSL #1
  3325. ADD r7,r4,r7 
  3326. CMP r7,r14 
  3327. MOVCC r14,r7 
  3328. ADD r5,r5,#1
  3329. CMP r5,#ncol%
  3330. BCC devloop
  3331. LDMFD r13!,{r0,r1,r2,r3,r4}
  3332. LDR r5,fsaad 
  3333. MOV r7,r5
  3334. MOV r10,#0
  3335. .calcnum0
  3336. LDMIA r12!,{r8,r11} 
  3337. CMP r8,r9 
  3338. STRLEB r10,[r7],#1
  3339. ADD r10,r10,#1
  3340. CMP r11,r9 
  3341. STRLEB r10,[r7],#1
  3342. ADD r10,r10,#1
  3343. LDMIA r12!,{r8,r11} 
  3344. CMP r8,r9 
  3345. STRLEB r10,[r7],#1
  3346. ADD r10,r10,#1
  3347. CMP r11,r9 
  3348. STRLEB r10,[r7],#1
  3349. ADD r10,r10,#1
  3350. CMP r10,#ncol%
  3351. BCC calcnum0
  3352. SUBS r10,r7,r5
  3353. SWIEQ 256+
  3354. CMP r10,#4 ;if<4 then
  3355. o#MOVCC r7,r5 ;reset list pointer
  3356. p"LDRCCB r5,[r7] ;first possible
  3357. q&LDRCCB r8,[r7,#1] ;second possible
  3358. RCC r5,r5,r8,lsl #8
  3359. s%LDRCCB r8,[r7,#2] ;third possible
  3360. RCC r5,r5,r8,lsl #16
  3361. ADD r5,r5,r10,lsl #24
  3362. BIC r10,r3,#1
  3363. STR r5,[r4,r10,LSL #2]
  3364. MOV r5,r7
  3365. MOV r10,#0
  3366. .calcnum1
  3367. LDMIA r12!,{r8,r11} 
  3368. CMP r8,r14 
  3369. STRLEB r10,[r7],#1
  3370. ADD r10,r10,#1
  3371. CMP r11,r14 
  3372. STRLEB r10,[r7],#1
  3373. ADD r10,r10,#1
  3374. LDMIA r12!,{r8,r11} 
  3375. CMP r8,r14 
  3376. STRLEB r10,[r7],#1
  3377. ADD r10,r10,#1
  3378. CMP r11,r14 
  3379. STRLEB r10,[r7],#1
  3380. ADD r10,r10,#1
  3381. CMP r10,#ncol%
  3382. BCC calcnum1
  3383. SUBS r10,r7,r5
  3384. SWIEQ 256+
  3385. CMP r10,#4 ;if<4 then
  3386. MOVCC r7,r5 
  3387. LDRCCB r5,[r7] 
  3388. LDRCCB r8,[r7,#1] 
  3389. RCC r5,r5,r8,lsl #8
  3390. LDRCCB r8,[r7,#2] 
  3391. RCC r5,r5,r8,lsl #16
  3392. ADD r5,r5,r10,lsl #24
  3393. R r10,r3,#1
  3394. STR r5,[r4,r10,LSL #2]
  3395. STR r7,fsaad
  3396. LDR r8,fsalim
  3397. CMP r7,r8
  3398. SWICS 256+
  3399. LDMFD r13!,{r6,r8,r14}
  3400. MSR CPSR_f,r6
  3401. MOV pc,r14
  3402. .redequal0
  3403. STR r3,[r12,r5,LSL #2] 
  3404. TST r8,#td2%
  3405. SUBNE r11,r8,r0 
  3406. SUBEQ r11,r11,r8 
  3407. B donered0
  3408. .redequal1
  3409. TST r8,#td2%
  3410. SUBNE r11,r8,r7 
  3411. SUBEQ r11,r11,r8 
  3412. B donered1
  3413. .greenequal
  3414. TST r8,#td2%
  3415. SUBNE r11,r8,r1 
  3416. SUBEQ r11,r11,r8 
  3417. B donegreen
  3418. .blueequal
  3419. MOV r3,#0 
  3420. TST r8,#td2%
  3421. SUBNE r11,r8,r2 
  3422. SUBEQ r11,r11,r8 
  3423. B doneblue
  3424.  make%
  3425.  info% 
  3426. "Generated 'r'";k%" tables for ";ncol%" colours using ";!fsaad-scratch%" bytes, taking "
  3427. -I%" cs"
  3428. %safesubict%=
  3429. dim(!fsaad-scratch%)
  3430.  I%=0
  3431. !fsaad-scratch%+4
  3432. 4:safesubict%!I%=scratch%!I%:
  3433.  I%=0
  3434. 2^(k%*3)*4-1
  3435. (ict%!I%>>>24)>3 ict%!I%=ict%!I%-scratch%+safesubict%
  3436.  fast% 
  3437.  -1,-9:col=0
  3438.  -3,-4,-5,-6,-7,-8,-10:col=2
  3439.  m$="D" 
  3440.  ncol=3 m$=""
  3441. 1col=0:
  3442.  ncol>15 
  3443. m$="C" 
  3444. m$="D" 
  3445. m$="R" col=2
  3446.  ncol=63 
  3447.  ncol=255 
  3448.  m$="D" col=0:ncol=256
  3449.  ncol=1 
  3450. "C":col=0:x%=x%+1
  3451. "D":col=0:x%=x%+3
  3452. "T":col=0:x%=x%+1
  3453.  cl%(x%+7,col)
  3454.  xl%(x%+7,col),xp%(sx%+7,col)
  3455.  xl2%(x%+7,col)
  3456.  sharpen% 
  3457.  order% 
  3458.  rm%(sx%+7,col),rm1%(sx%+7,col),rm2%(sx%+7,col)
  3459.  rm%(x%+7,col),rm1%(x%+7,col),rm2%(x%+7,col)
  3460.  hist%
  3461. equal% 
  3462.  vals%(256,col)
  3463.  nl%(x%+7,col)
  3464. totvals%=x%*(col+1)
  3465. totvals2%=sx%*(col+1)
  3466. 2:P%=code%
  3467.  ncol 
  3468.  2^24-1
  3469. [OPT Z
  3470. .div255
  3471.  I%=0
  3472. 2^p6bits-1
  3473. [OPT Z
  3474. EQUD I%/(2^p6bits-1)*F
  3475. [OPT Z
  3476. MRS R1,CPSR
  3477. STMFD SP !,{R1,R14}
  3478. ADR R7,div255
  3479. !LDR R1,[R9,#5*8]:LDR R1,[R1] 
  3480. LDR R10,[R9,#4*8] 
  3481. LDR R11,[R9,#3*8] 
  3482. $LDR R12,[R9,#2*8]:LDR R12,[R12] 
  3483. LDR R8,[R9,#8]:LDR R8,[R8] 
  3484. LDR R9,[R9]:LDR R9,[R9] 
  3485. LDR R4,[R10] 
  3486. LDR R5,[R10,#4] 
  3487. LDR R6,[R10,#8] 
  3488. .fsloop
  3489. ADD R10,R10,R8 
  3490. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3491. WSUB R0,R4,R4,LSR #p6bits:ADD R0,R0,#1<<(bits-p6bits-1):MOV R0,R0,LSR #(bits-p6bits)
  3492. &LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
  3493. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3494. jSUB R3,R5,R5,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
  3495. R R0,R0,R3,LSL #8
  3496. &LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
  3497. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3498. kSUB R3,R6,R6,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
  3499. R R0,R0,R3,LSL #16
  3500. &LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
  3501. DSTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:MOV R0,R0,LSR #8
  3502. STRB R0,[R12,#2]
  3503.  m=-8 
  3504. [OPT Z
  3505. ADD R12,R12,R1,LSL #2
  3506. [OPT Z
  3507.         (ADD R12,R12,R1,LSL #1:ADD R12,R12,R1
  3508.  dither% 
  3509. [OPT Z
  3510. ADD R0,R11,#4 
  3511. ADD R2,R4,R4,LSL #1 
  3512. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  3513. STR R3,[R11,-R8]
  3514. ADD R2,R4,R4,LSL #2 
  3515. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  3516. STR R3,[R11]
  3517. MOV R3,R4,ASR #4 
  3518. STR R3,[R11,R8]! 
  3519. RSB R2,R4,R4,LSL #3 
  3520. LDR R4,[R10] 
  3521. ADD R4,R4,R2,ASR #4 
  3522. ADD R2,R5,R5,LSL #1 
  3523. (LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3524. STR R3,[R0,-R8]
  3525. MOV R3,R5,ASR #4 
  3526. STR R3,[R0,R8] 
  3527. ADD R2,R5,R5,LSL #2 
  3528.      $LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3529. STR R3,[R0],#4 
  3530. RSB R2,R5,R5,LSL #3 
  3531. LDR R5,[R10,#4] 
  3532. ADD R5,R5,R2,ASR #4 
  3533. ADD R2,R6,R6,LSL #1 
  3534.     &(LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3535. STR R3,[R0,-R8]
  3536. ADD R2,R6,R6,LSL #2 
  3537.     )$LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3538. STR R3,[R0]
  3539. MOV R3,R6,ASR #4 
  3540. STR R3,[R0,R8] 
  3541. RSB R2,R6,R6,LSL #3 
  3542. LDR R6,[R10,#8] 
  3543. ADD R6,R6,R2,ASR #4 
  3544. [OPT Z
  3545. LDMIA R10,{R4,R5,R6}
  3546. [OPT Z
  3547. SUBS R9,R9,#1:BNE fsloop
  3548. LDMFD SP !,{R9,R14}
  3549. MSR CPSR_f,R9
  3550. MOV PC,R14
  3551.  2^15-1
  3552. [OPT Z
  3553. .div31
  3554.  I%=0
  3555. [OPT Z
  3556. EQUD I%/31*F
  3557. [OPT Z
  3558. MRS R1,CPSR
  3559. STMFD SP !,{R1,R14}
  3560. ADR R7,div31
  3561.     J!LDR R1,[R9,#5*8]:LDR R1,[R1] 
  3562. LDR R10,[R9,#4*8] 
  3563. LDR R11,[R9,#3*8] 
  3564.     M$LDR R12,[R9,#2*8]:LDR R12,[R12] 
  3565. LDR R8,[R9,#8]:LDR R8,[R8] 
  3566. LDR R9,[R9]:LDR R9,[R9] 
  3567. LDR R4,[R10] 
  3568. LDR R5,[R10,#4] 
  3569. LDR R6,[R10,#8] 
  3570. .fsloop
  3571. ADD R10,R10,R8 
  3572.     U%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3573.     VFSUB R0,R4,R4,LSR #5:ADD R0,R0,#1<<(bits-6):MOV R0,R0,LSR #(bits-5)
  3574.     W&LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
  3575.     X%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3576.     YYSUB R3,R5,R5,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
  3577. R R0,R0,R3,LSL #5
  3578.     Z&LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
  3579.     [%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3580.     \ZSUB R3,R6,R6,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
  3581. R R0,R0,R3,LSL #10
  3582.     ]&LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
  3583.     ^ISTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:ADD R12,R12,R1,LSL #1
  3584.  dither% 
  3585. [OPT Z
  3586. ADD R0,R11,#4 
  3587. ADD R2,R4,R4,LSL #1 
  3588.     d)LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  3589. STR R3,[R11,-R8]
  3590. ADD R2,R4,R4,LSL #2 
  3591.     g%LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  3592. STR R3,[R11]
  3593. MOV R3,R4,ASR #4 
  3594. STR R3,[R11,R8]! 
  3595. RSB R2,R4,R4,LSL #3 
  3596. LDR R4,[R10] 
  3597. ADD R4,R4,R2,ASR #4 
  3598. ADD R2,R5,R5,LSL #1 
  3599.     o(LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3600. STR R3,[R0,-R8]
  3601. MOV R3,R5,ASR #4 
  3602. STR R3,[R0,R8] 
  3603. ADD R2,R5,R5,LSL #2 
  3604.     t$LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3605. STR R3,[R0],#4 
  3606. RSB R2,R5,R5,LSL #3 
  3607. LDR R5,[R10,#4] 
  3608. ADD R5,R5,R2,ASR #4 
  3609. ADD R2,R6,R6,LSL #1 
  3610.     z(LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3611. STR R3,[R0,-R8]
  3612. ADD R2,R6,R6,LSL #2 
  3613.     }$LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3614. STR R3,[R0]
  3615. MOV R3,R6,ASR #4 
  3616. STR R3,[R0,R8] 
  3617. RSB R2,R6,R6,LSL #3 
  3618. LDR R6,[R10,#8] 
  3619. ADD R6,R6,R2,ASR #4 
  3620. [OPT Z
  3621. LDMIA R10,{R4,R5,R6}
  3622. [OPT Z
  3623. SUBS R9,R9,#1:BNE fsloop
  3624. LDMFD SP !,{R9,R14}
  3625. MSR CPSR_f,R9
  3626. MOV PC,R14
  3627. [OPT Z
  3628. .div255
  3629.  I%=0
  3630. [OPT Z
  3631. EQUD I%/255*F
  3632. [OPT Z
  3633. MRS R10,CPSR
  3634. STMFD SP !,{R10,R14}
  3635. ADR R7,div255
  3636. LDR R10,[R9,#4*8] 
  3637. !LDR R1,[R9,#5*8]:LDR R1,[R1] 
  3638. LDR R11,[R9,#3*8] 
  3639. $LDR R12,[R9,#2*8]:LDR R12,[R12] 
  3640. LDR R8,[R9,#8]:LDR R8,[R8] 
  3641. LDR R9,[R9]:LDR R9,[R9] 
  3642. LDR R4,[R10],R8 
  3643. .fsloop
  3644. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3645. WSUB R0,R4,R4,LSR #8:ADD R0,R0,#1<<(bits-9):MOV R0,R0,LSR #(bits-8):STRB R0,[R12],R1
  3646. LDR R2,[R7,R0,LSL #2]
  3647.  dither% 
  3648. [OPT Z
  3649. SUB R4,R4,R2 
  3650. MOVCS R4,#0
  3651. ADD R2,R4,R4,LSL #1 
  3652. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  3653. STR R3,[R11,-R8]
  3654. ADD R2,R4,R4,LSL #2 
  3655. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  3656. STR R3,[R11]
  3657. MOV R3,R4,ASR #4 
  3658. STR R3,[R11,R8]! 
  3659. RSB R2,R4,R4,LSL #3 
  3660. LDR R4,[R10],R8 
  3661. ADD R4,R4,R2,ASR #4 
  3662. [OPT Z
  3663. LDR R4,[R10],R8
  3664. [OPT Z
  3665. SUBS R9,R9,#1:BNE fsloop
  3666. LDMFD SP !,{R9,R14}
  3667. MSR CPSR_f,R9
  3668. MOV PC,R14
  3669.  63,255
  3670. div15=P%:
  3671.  I%=0
  3672. 255*4
  3673. [OPT Z
  3674.  EQUD (palette%!I%
  3675. &FF)/255*F
  3676. #EQUD (palette%!I%>>8
  3677. &FF)/255*F
  3678. $EQUD (palette%!I%>>16
  3679. &FF)/255*F
  3680.  m$="R" 
  3681. [OPT Z
  3682. .ictloc EQUD ict%
  3683. [OPT Z
  3684. EQUD div15
  3685. MRS R1,CPSR
  3686. STMFD SP !,{R1,R14}
  3687. !LDR R1,[R9,#5*8]:LDR R1,[R1] 
  3688. LDR R10,[R9,#4*8] 
  3689. LDR R11,[R9,#3*8] 
  3690. $LDR R12,[R9,#2*8]:LDR R12,[R12] 
  3691. LDR R8,[R9,#8]:LDR R8,[R8] 
  3692. LDR R9,[R9]:LDR R9,[R9] 
  3693. LDR R4,[R10] 
  3694. LDR R5,[R10,#4] 
  3695. LDR R6,[R10,#8] 
  3696. LDR R7,fs%-4
  3697. .fsloop
  3698. ADD R10,R10,R8 
  3699. [OPT Z
  3700. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3701. 4MOV R0,R4,LSR #(bits-4):CMP R0,#15:MOVCS R0,#15 
  3702. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3703. GMOV R3,R5,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
  3704. R R0,R0,R3,LSL #4 
  3705. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3706. GMOV R3,R6,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
  3707. R R0,R0,R3,LSL #8 
  3708. LDR R3,colmatchloc
  3709. LDRB R0,[R3,R0]
  3710. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  3711. LDR R2,[R3],#4:SUB R4,R4,R2
  3712. .LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  3713. srchdevlist
  3714. [OPT Z
  3715. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3716. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3717. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3718. STMFD SP !,{R7,R8,R9}
  3719. MVN R2,#0
  3720. MOV R3,#&30<<23
  3721. .srch RSB R7,R3,#&20<<23
  3722. MOV R8,R6,LSR #bits-8
  3723. SUB R8,R8,R8,LSR #4
  3724. ADDS R7,R7,R8,LSL #23
  3725. MOVVSS R7,#&7F000000
  3726. MOVMI R7,#0
  3727.  R7,R7,#&60000000
  3728. ADD R7,R7,R3
  3729. ADD R14,R7,R7,LSR #4
  3730. ADD R7,R14,R14,LSR #8
  3731. ADD R7,R7,R7,LSR #16
  3732. SUBS R8,R6,R7,LSR #31-bits
  3733. RSBLT R8,R8,#0
  3734. MOV R8,R8,LSR #bits/2
  3735. MUL R9,R8,R8
  3736. RSB R7,R3,#&20<<23
  3737. MOV R8,R5,LSR #bits-8
  3738. SUB R8,R8,R8,LSR #4
  3739. ADDS R7,R7,R8,LSL #23
  3740. MOVVSS R7,#&7F000000
  3741. MOVMI R7,#0
  3742.  R7,R7,#&60000000
  3743. ADD R7,R3,R7
  3744. ADD R7,R7,R7,LSR #4
  3745. R R14,R14,R7,LSR #8
  3746. ADD R7,R7,R7,LSR #8
  3747. ADD R7,R7,R7,LSR #16
  3748. SUBS R8,R5,R7,LSR #31-bits
  3749. RSBLT R8,R8,#0
  3750. MOV R8,R8,LSR #bits/2
  3751. MUL R7,R8,R8
  3752. ADD R7,R7,R7,LSL #2
  3753. ADD R9,R9,R7,LSL #1
  3754. RSB R7,R3,#&20<<23
  3755. MOV R8,R4,LSR #bits-8
  3756. SUB R8,R8,R8,LSR #4
  3757. ADDS R7,R7,R8,LSL #23
  3758. MOVVSS R7,#&7F000000
  3759. MOVMI R7,#0
  3760.  R7,R7,#&60000000
  3761. ADD R7,R3,R7
  3762. ADD R7,R7,R7,LSR #4
  3763. R R14,R14,R7,LSR #16
  3764. ADD R7,R7,R7,LSR #8
  3765. ADD R7,R7,R7,LSR #16
  3766. SUBS R8,R4,R7,LSR #31-bits
  3767. RSBLT R8,R8,#0
  3768. MOV R8,R8,LSR #bits/2
  3769. MUL R7,R8,R8
  3770. ADD R7,R7,R7,LSL #1
  3771. ADD R9,R9,R7
  3772. CMP R9,R2
  3773. MOVLS R2,R9
  3774. MOVLS R0,R14
  3775. SUBS R3,R3,#&10<<23
  3776. BGE srch
  3777.  R7,R0,#&40000000
  3778. MOV R8,R7,LSR #23
  3779.  R7,R0,#&600000
  3780. R R8,R8,R7,LSR #16
  3781.  R7,R0,#&4000
  3782. R R8,R8,R7,LSR #10
  3783.  R7,R0,#&20000000
  3784. R R8,R8,R7,LSR #26
  3785.  R7,R0,#&3800
  3786. R R0,R8,R7,LSR #11
  3787. LDMFD SP !,{R7,R8,R9}
  3788. @+ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  3789. LDR R2,[R3],#4:SUB R4,R4,R2
  3790. B.LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  3791. [OPT Z
  3792. STRB R0,[R12],R1
  3793.  dither% 
  3794. [OPT Z
  3795. ADD R0,R11,#4 
  3796. ADD R2,R4,R4,LSL #1 
  3797. L)LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  3798. STR R3,[R11,-R8]
  3799. ADD R2,R4,R4,LSL #2 
  3800. O%LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  3801. STR R3,[R11]
  3802. MOV R3,R4,ASR #4 
  3803. STR R3,[R11,R8]! 
  3804. RSB R2,R4,R4,LSL #3 
  3805. LDR R4,[R10] 
  3806. ADD R4,R4,R2,ASR #4 
  3807. ADD R2,R5,R5,LSL #1 
  3808. W(LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3809. STR R3,[R0,-R8]
  3810. MOV R3,R5,ASR #4 
  3811. STR R3,[R0,R8] 
  3812. ADD R2,R5,R5,LSL #2 
  3813. \$LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3814. STR R3,[R0],#4 
  3815. RSB R2,R5,R5,LSL #3 
  3816. LDR R5,[R10,#4] 
  3817. ADD R5,R5,R2,ASR #4 
  3818. ADD R2,R6,R6,LSL #1 
  3819. b(LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3820. STR R3,[R0,-R8]
  3821. ADD R2,R6,R6,LSL #2 
  3822. e$LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3823. STR R3,[R0]
  3824. MOV R3,R6,ASR #4 
  3825. STR R3,[R0,R8] 
  3826. RSB R2,R6,R6,LSL #3 
  3827. LDR R6,[R10,#8] 
  3828. ADD R6,R6,R2,ASR #4 
  3829. [OPT Z
  3830. LDMIA R10,{R4,R5,R6}
  3831. [OPT Z
  3832. SUBS R9,R9,#1:BNE fsloop
  3833. LDMFD SP !,{R9,R14}
  3834. MSR CPSR_f,R9
  3835. MOV PC,R14
  3836. divtable=P%:
  3837.  I%=0
  3838. [OPT Z
  3839. ~&EQUD (palette%!I%>>4
  3840. &F)/bright%*F
  3841. 'EQUD (palette%!I%>>12
  3842. &F)/bright%*F
  3843. 'EQUD (palette%!I%>>20
  3844. &F)/bright%*F
  3845. [OPT Z
  3846. .ictloc EQUD ict%
  3847.  I%=0
  3848. [OPT Z
  3849. EQUD I%/bright%*F
  3850.  I%=0
  3851. [OPT Z
  3852. EQUD I%/(bright%
  3853. [OPT Z
  3854. MRS R1,CPSR
  3855. STMFD SP !,{R1,R14}
  3856. !LDR R1,[R9,#5*8]:LDR R1,[R1] 
  3857. LDR R10,[R9,#4*8] 
  3858. LDR R11,[R9,#3*8] 
  3859. $LDR R12,[R9,#2*8]:LDR R12,[R12] 
  3860. LDR R8,[R9,#8]:LDR R8,[R8] 
  3861. LDR R9,[R9]:LDR R9,[R9] 
  3862.  m$="D" 
  3863. m$="R" 
  3864. [OPT Z
  3865. LDR R4,[R10] 
  3866. LDR R5,[R10,#4] 
  3867. LDR R6,[R10,#8] 
  3868. [OPT Z
  3869. LDR R4,[R10],R8 
  3870.  m$<>"D" 
  3871. [OPT Z
  3872. ADR R7,divtable
  3873. [OPT Z
  3874. .fsloop
  3875. [OPT Z
  3876. ADD R10,R10,R8
  3877. srchdevlist
  3878. [OPT Z
  3879. MOV r3,r0
  3880. [OPT Z
  3881. ADD R10,R10,R8 
  3882. MOV R3,#0
  3883. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3884. CMP R4,#F>>1 
  3885.  SUBCS R4,R4,#F:
  3886. RCS R3,R3,#1
  3887. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3888. CMP R5,#F>>1 
  3889.  SUBCS R5,R5,#F:
  3890. RCS R3,R3,#2
  3891. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3892. CMP R6,#F>>1 
  3893.  SUBCS R6,R6,#F:
  3894. RCS R3,R3,#4
  3895. [OPT Z
  3896. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3897. <RSB R3,R4,R4,LSL #4:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 
  3898. LDR R2,[R7,R3,LSL #2] 
  3899. SUB R4,R4,R2 
  3900. [OPT Z
  3901. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3902. <RSB R3,R4,R4,LSL #3:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits 
  3903. LDR R2,[R7,R3,LSL #2] 
  3904. SUB R4,R4,R2 
  3905. [OPT Z
  3906. MOV R2,R12,LSR #1
  3907. TST R12,#1
  3908. LDRB R0,[R2]
  3909. EQ R0,R0,#&F0:
  3910. REQ R0,R0,R3
  3911. NE R0,R0,#&0F:
  3912. RNE R0,R0,R3,LSL #4
  3913. STRB R0,[R2]
  3914. ADD R12,R12,R1
  3915.  m$="D" 
  3916. m$="R" 
  3917.  dither% 
  3918. [OPT Z
  3919. ADD R0,R11,#4 
  3920. ADD R2,R4,R4,LSL #1 
  3921. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  3922. STR R3,[R11,-R8]
  3923. ADD R2,R4,R4,LSL #2 
  3924. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  3925. STR R3,[R11]
  3926. MOV R3,R4,ASR #4 
  3927. STR R3,[R11,R8]! 
  3928. RSB R2,R4,R4,LSL #3 
  3929. LDR R4,[R10] 
  3930. ADD R4,R4,R2,ASR #4 
  3931. ADD R2,R5,R5,LSL #1 
  3932. (LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3933. STR R3,[R0,-R8]
  3934. MOV R3,R5,ASR #4 
  3935. STR R3,[R0,R8] 
  3936. ADD R2,R5,R5,LSL #2 
  3937. $LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3938. STR R3,[R0],#4 
  3939. RSB R2,R5,R5,LSL #3 
  3940. LDR R5,[R10,#4] 
  3941. ADD R5,R5,R2,ASR #4 
  3942. ADD R2,R6,R6,LSL #1 
  3943. (LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  3944. STR R3,[R0,-R8]
  3945. ADD R2,R6,R6,LSL #2 
  3946. $LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  3947. STR R3,[R0]
  3948. MOV R3,R6,ASR #4 
  3949. STR R3,[R0,R8] 
  3950. RSB R2,R6,R6,LSL #3 
  3951. LDR R6,[R10,#8] 
  3952. ADD R6,R6,R2,ASR #4 
  3953. [OPT Z
  3954. LDMIA R10,{R4,R5,R6}
  3955.  dither% 
  3956. [OPT Z
  3957. ADD R2,R4,R4,LSL #1 
  3958. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  3959. STR R3,[R11,-R8]
  3960. ADD R2,R4,R4,LSL #2 
  3961. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  3962. STR R3,[R11]
  3963. MOV R3,R4,ASR #4 
  3964. STR R3,[R11,R8]! 
  3965. RSB R2,R4,R4,LSL #3 
  3966. LDR R4,[R10],R8 
  3967. ADD R4,R4,R2,ASR #4 
  3968. [OPT Z
  3969. LDR R4,[R10],R8
  3970. [OPT Z
  3971. SUBS R9,R9,#1:BNE fsloop
  3972. LDMFD SP !,{R9,R14}
  3973. MSR CPSR_f,R9
  3974. MOV PC,R14
  3975. divtable=P%:
  3976.  I%=0
  3977. [OPT Z
  3978. ,&EQUD (palette%!I%>>4
  3979. &F)/bright%*F
  3980. -'EQUD (palette%!I%>>12
  3981. &F)/bright%*F
  3982. .'EQUD (palette%!I%>>20
  3983. &F)/bright%*F
  3984. [OPT Z
  3985. EQUD 0
  3986. EQUD 1/(bright%
  3987. EQUD 2/(bright%
  3988. EQUD F
  3989. [OPT Z
  3990. MRS R1,CPSR
  3991. STMFD SP !,{R1,R14}
  3992. =!LDR R1,[R9,#5*8]:LDR R1,[R1] 
  3993. LDR R10,[R9,#4*8] 
  3994. LDR R11,[R9,#3*8] 
  3995. LDR R12,[R9,#2*8] 
  3996. LDR R12,[R12] 
  3997. LDR R8,[R9,#8] 
  3998. LDR R8,[R8] 
  3999. LDR R9,[R9] 
  4000. LDR R9,[R9] 
  4001.  m$="C" 
  4002. m$="R" 
  4003. [OPT Z
  4004. LDR R4,[R10] 
  4005. LDR R5,[R10,#4] 
  4006. LDR R6,[R10,#8] 
  4007. [OPT Z
  4008. LDR R4,[R10],R8 
  4009. [OPT Z
  4010. .fsloop
  4011.  m$<>"C"
  4012. [OPT Z
  4013. ADR R7,divtable
  4014. [OPT Z
  4015. ADD R10,R10,R8 
  4016. ^%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4017. _%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  4018. `%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  4019. MOV R3,#0 
  4020. CMP R4,#F>>1:
  4021. RCS R3,R3,#1
  4022. CMP R5,#F>>1:
  4023. RCS R3,R3,#2
  4024. CMP R6,#F>>1:
  4025. RCS R3,R3,#4
  4026. e"CMP R3,#6:
  4027. Q R3,#1:BEQ octcyan
  4028. BCS octwhite
  4029. CMP R3,#4:BEQ octblue
  4030. MOVCS R3,#2:BCS octmagenta
  4031. CMP R3,#2:BEQ octgreen
  4032. BCS octyellow
  4033. CMP R3,#0:BEQ octblack
  4034. .octred
  4035. RSB R0,R4,#F 
  4036. CMP R5,R0 
  4037. BLT octred1
  4038. CMP R5,R6 
  4039. MOVGE R3,#3 
  4040. MOVLT R3,#2 
  4041. B octconvert
  4042. .octred1
  4043. CMP R0,R6 
  4044. MOVGE R3,#0 
  4045. MOVLT R3,#2 
  4046. B octconvert
  4047. .octgreen
  4048. RSB R0,R5,#F 
  4049. CMP R0,R4 
  4050. BLT octgreen1
  4051. CMP R0,R6 
  4052. MOVGE R3,#0 
  4053. MOVLT R3,#1 
  4054. B octconvert
  4055. .octgreen1
  4056. CMP R4,R6 
  4057. MOVGE R3,#3 
  4058. MOVLT R3,#1 
  4059. B octconvert
  4060. .octblue
  4061. RSB R0,R6,#F 
  4062. CMP R0,R4 
  4063. BLT octblue1
  4064. CMP R0,R5 
  4065. MOVGE R3,#0 
  4066. MOVLT R3,#1 
  4067. B octconvert
  4068. .octblue1
  4069. CMP R4,R5 
  4070. MOVGE R3,#2 
  4071. MOVLT R3,#1 
  4072. B octconvert
  4073. .octwhite
  4074. CMP R4,R5 
  4075. BLT octwhite1
  4076. CMP R5,R6 
  4077. MOVGE R3,#3 
  4078. MOVLT R3,#2 
  4079. B octconvert
  4080. .octwhite1
  4081. CMP R4,R6 
  4082. MOVGE R3,#3 
  4083. MOVLT R3,#1 
  4084. .octconvert
  4085. CMP R3,#1 
  4086. .octcyan
  4087. SUBEQ R5,R5,#F
  4088. SUBEQ R6,R6,#F
  4089. .octmagenta
  4090. CMP R3,#2 
  4091. SUBEQ R4,R4,#F
  4092. SUBEQ R6,R6,#F
  4093. .octyellow
  4094. CMP R3,#3 
  4095. SUBEQ R4,R4,#F
  4096. SUBEQ R5,R5,#F
  4097. .octblack
  4098. MOV R2,R12,LSR #2
  4099.  R7,R12,#3:MOV R7,R7,LSL #1
  4100. MOV R14,#3
  4101. ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
  4102. R R0,R0,R3,LSL R7:STRB R0,[R2]
  4103. ADD R12,R12,R1
  4104. [OPT Z
  4105. ADD R10,R10,R8
  4106. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4107. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  4108. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  4109. STMFD SP !,{R8,R9,R10}
  4110. MVN R2,#0
  4111. MOV R3,#3
  4112. .srch ADD R14,R3,R3,LSL #1
  4113. ADD R14,R7,R14,LSL #2
  4114. LDMIA R14,{R8,R9,R10}
  4115. SUBS R8,R4,R8
  4116. RSBMI R8,R8,#0
  4117. SUBS R9,R5,R9
  4118. RSBMI R9,R9,#0
  4119. SUBS R10,R6,R10
  4120. RSBMI R10,R10,#0
  4121. MOV R14,R8,LSR #bits/2
  4122. MUL R8,R14,R14
  4123. MOV R14,R9,LSR #bits/2
  4124. MUL R9,R14,R14
  4125. MOV R14,R10,LSR #bits/2
  4126. MUL R10,R14,R14
  4127. ADD R9,R9,R9,LSL #2
  4128. ADD R8,R8,R8,LSL #1
  4129. ADD R14,R8,R9,LSL #1
  4130. ADD R14,R14,R10
  4131. CMP R14,R2
  4132. MOVCC R2,R14
  4133. MOVCC R0,R3
  4134. SUBS R3,R3,#1
  4135. BPL srch
  4136. LDMFD SP !,{R8,R9,R10}
  4137. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  4138. LDR R2,[R3],#4:SUB R4,R4,R2
  4139. .LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  4140. MOV R3,R0
  4141. MOV R2,R12,LSR #2
  4142.  R7,R12,#3:MOV R7,R7,LSL #1
  4143. MOV R14,#3
  4144. ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
  4145. R R0,R0,R3,LSL R7:STRB R0,[R2]
  4146. ADD R12,R12,R1
  4147. [OPT Z
  4148. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4149. ;RSB R3,R4,R4,LSL #2:ADD R3,R3,#F>>1:MOV R3,R3,LSR#bits 
  4150. LDR R2,[R7,R3,LSL #2] 
  4151. SUB R4,R4,R2 
  4152. MOV R2,R12,LSR #2
  4153.  R5,R12,#3:MOV R5,R5,LSL #1
  4154. MOV R6,#3
  4155. DLDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
  4156. R R0,R0,R3,LSL R5:STRB R0,[R2]
  4157. ADD R12,R12,R1
  4158.  m$="C" 
  4159. m$="R" 
  4160.  dither% 
  4161. [OPT Z
  4162. ADD R0,R11,#4 
  4163. ADD R2,R4,R4,LSL #1 
  4164. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4165. STR R3,[R11,-R8]
  4166. ADD R2,R4,R4,LSL #2 
  4167. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4168. STR R3,[R11]
  4169. MOV R3,R4,ASR #4 
  4170. STR R3,[R11,R8]! 
  4171. RSB R2,R4,R4,LSL #3 
  4172. LDR R4,[R10] 
  4173. ADD R4,R4,R2,ASR #4 
  4174. ADD R2,R5,R5,LSL #1 
  4175. (LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  4176. STR R3,[R0,-R8]
  4177. MOV R3,R5,ASR #4 
  4178. STR R3,[R0,R8] 
  4179. ADD R2,R5,R5,LSL #2 
  4180. $LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  4181. STR R3,[R0],#4 
  4182. RSB R2,R5,R5,LSL #3 
  4183. LDR R5,[R10,#4] 
  4184. ADD R5,R5,R2,ASR #4 
  4185. ADD R2,R6,R6,LSL #1 
  4186. (LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4 
  4187. STR R3,[R0,-R8]
  4188. ADD R2,R6,R6,LSL #2 
  4189.     $LDR R3,[R0]:ADD R3,R3,R2,ASR #4 
  4190. STR R3,[R0]
  4191. MOV R3,R6,ASR #4 
  4192. STR R3,[R0,R8] 
  4193. RSB R2,R6,R6,LSL #3 
  4194. LDR R6,[R10,#8] 
  4195. ADD R6,R6,R2,ASR #4 
  4196. [OPT Z
  4197. LDMIA R10,{R4,R5,R6}
  4198.  dither% 
  4199. [OPT Z
  4200. ADD R2,R4,R4,LSL #1 
  4201. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4202. STR R3,[R11,-R8]
  4203. ADD R2,R4,R4,LSL #2 
  4204. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4205. STR R3,[R11]
  4206. MOV R3,R4,ASR #4 
  4207. STR R3,[R11,R8]! 
  4208. RSB R2,R4,R4,LSL #3 
  4209. LDR R4,[R10],R8 
  4210. ADD R4,R4,R2,ASR #4 
  4211. [OPT Z
  4212. LDR R4,[R10],R8
  4213. [OPT Z
  4214. SUBS R9,R9,#1:BNE fsloop
  4215. LDMFD SP !,{R9,R14}
  4216. MSR CPSR_f,R9
  4217. MOV PC,R14
  4218. [OPT Z
  4219. .divtable EQUD 0
  4220. EQUD (1-black%/256*2)/16*F
  4221. EQUD (2-black%/256*4)/16*F
  4222. EQUD (3-black%/256*5)/16*F
  4223. EQUD (4-black%/256*6)/16*F
  4224. EQUD (5-black%/256*7)/16*F
  4225. EQUD (6-black%/256*8)/16*F
  4226. EQUD (7-black%/256*8)/16*F
  4227. EQUD (8-black%/256*8)/16*F
  4228. EQUD (9-black%/256*8)/16*F
  4229. EQUD (10-black%/256*8)/16*F
  4230. EQUD (11-black%/256*7)/16*F
  4231. EQUD (12-black%/256*6)/16*F
  4232. EQUD (13-black%/256*5)/16*F
  4233. EQUD (14-black%/256*4)/16*F
  4234. EQUD (15-black%/256*2)/16*F
  4235. EQUD F
  4236. .evenrow_gard DCD even_gard
  4237. .oddrow_gard DCD odd_gard
  4238. .rowinc DCD 0
  4239. MRS R1,CPSR
  4240. STMFD SP !,{R1,R14}
  4241. L!LDR R1,[R9,#5*8]:LDR R1,[R1] 
  4242. LDR R10,[R9,#4*8] 
  4243. LDR R11,[R9,#3*8] 
  4244. LDR R12,[R9,#2*8] 
  4245. LDR R12,[R12] 
  4246. LDR R8,[R9,#8] 
  4247. LDR R8,[R8] 
  4248. LDR R9,[R9] 
  4249. LDR R9,[R9] 
  4250. LDR R4,[R10],R8 
  4251. TEQ R8,#0
  4252. LDRPL R6,evenrow_gard
  4253. LDRMI R6,oddrow_gard
  4254. MOV R1,R1,LSL #1
  4255. LDR R7,rowinc
  4256. ADR R14,divtable
  4257. .fsloop
  4258. ]%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4259. ADD R5,R4,#F>>5 
  4260. MOVS R5,R5,LSR #bits-4 
  4261. LDRNE R0,[R14,R5,LSL #2]
  4262. SUBNE R4,R4,R0 
  4263.  dither% 
  4264. [OPT Z
  4265. ADD R2,R4,R4,LSL #1 
  4266. f)LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4267. STR R3,[R11,-R8]
  4268. ADD R2,R4,R4,LSL #2 
  4269. i%LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4270. STR R3,[R11]
  4271. MOV R3,R4,ASR #4 
  4272. STR R3,[R11,R8]! 
  4273. RSB R2,R4,R4,LSL #3 
  4274. LDR R4,[R10],R8 
  4275. ADDS R4,R4,R2,ASR #4 
  4276. [OPT Z
  4277. LDR R4,[R10],R8
  4278. [OPT Z
  4279. w%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4280. ADD R3,R4,#F>>5 
  4281. MOVS R3,R3,LSR #bits-4 
  4282. LDRNE R0,[R14,R3,LSL #2]
  4283. SUBNE R4,R4,R0 
  4284. R R5,R5,R3,LSL #5:LDR R3,[R6,R5,LSL #2] 
  4285. }FMOV R2,R12,LSR #1:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2],R7
  4286. ~BMOV R3,R3,LSR #8:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2]
  4287. ADD R12,R12,R1
  4288.  dither% 
  4289. [OPT Z
  4290. ADD R2,R4,R4,LSL #1 
  4291. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4292. STR R3,[R11,-R8]
  4293. ADD R2,R4,R4,LSL #2 
  4294. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4295. STR R3,[R11]
  4296. MOV R3,R4,ASR #4 
  4297. STR R3,[R11,R8]! 
  4298. RSB R2,R4,R4,LSL #3 
  4299. LDR R4,[R10],R8 
  4300. ADD R4,R4,R2,ASR #4 
  4301. [OPT Z
  4302. LDR R4,[R10],R8
  4303. [OPT Z
  4304. SUBS R9,R9,#2:BNE fsloop
  4305. LDMFD SP !,{R9,R14}
  4306. MSR CPSR_f,R9
  4307. MOV PC,R14
  4308. [OPT Z
  4309. .divtable EQUD 0
  4310. EQUD (1-black%/256*2)/9*F
  4311. EQUD (2-black%/256*4)/9*F
  4312. EQUD (3-black%/256*5)/9*F
  4313. EQUD (4-black%/256*6)/9*F
  4314. EQUD (5-black%/256*6)/9*F
  4315. EQUD (6-black%/256*5)/9*F
  4316. EQUD (7-black%/256*4)/9*F
  4317. EQUD (8-black%/256*2)/9*F
  4318. EQUD F
  4319. .evenrow_gard DCD even_gard
  4320. .oddrow_gard DCD odd_gard
  4321. .rowinc DCD 0
  4322. MRS R1,CPSR
  4323. STMFD SP !,{R1,R14}
  4324. !LDR R1,[R9,#5*8]:LDR R1,[R1] 
  4325. LDR R10,[R9,#4*8] 
  4326. LDR R11,[R9,#3*8] 
  4327. LDR R12,[R9,#2*8] 
  4328. LDR R12,[R12] 
  4329. LDR R8,[R9,#8] 
  4330. LDR R8,[R8] 
  4331. LDR R9,[R9] 
  4332. LDR R9,[R9] 
  4333. LDR R4,[R10],R8 
  4334. TEQ R8,#0
  4335. LDRPL R6,evenrow_gard
  4336. LDRMI R6,oddrow_gard
  4337. MOV R1,R1,LSL #1
  4338. LDR R7,rowinc
  4339. ADR R14,divtable
  4340. .fsloop
  4341. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4342. ADD R5,R4,#F>>4 
  4343. ADD R5,R5,R5,LSL #3 
  4344. MOVS R5,R5,LSR #bits 
  4345. LDRNE R0,[R14,R5,LSL #2]
  4346. SUBNE R4,R4,R0 
  4347.  dither% 
  4348. [OPT Z
  4349. ADD R2,R4,R4,LSL #1 
  4350. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4351. STR R3,[R11,-R8]
  4352. ADD R2,R4,R4,LSL #2 
  4353. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4354. STR R3,[R11]
  4355. MOV R3,R4,ASR #4 
  4356. STR R3,[R11,R8]! 
  4357. RSB R2,R4,R4,LSL #3 
  4358. LDR R4,[R10],R8 
  4359. ADDS R4,R4,R2,ASR #4 
  4360. [OPT Z
  4361. LDR R4,[R10],R8
  4362. [OPT Z
  4363. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4364. ADD R3,R4,#F>>4 
  4365. ADD R3,R3,R3,LSL #3 
  4366. MOVS R3,R3,LSR #bits 
  4367. LDRNE R0,[R14,R3,LSL #2]
  4368. SUBNE R4,R4,R0 
  4369. R R5,R5,R3,LSL #4:LDR R5,[R6,R5,LSL #2] 
  4370. MOV R2,R12,LSR #1
  4371.  R3,R5,#&3F
  4372. STRB R3,[R2],R7
  4373. !MOV R3,R5,LSR #6:
  4374.  R3,R3,#&3F
  4375. STRB R3,[R2],R7
  4376. "MOV R3,R5,LSR #12:STRB R3,[R2]
  4377. ADD R12,R12,R1
  4378.  dither% 
  4379. [OPT Z
  4380. ADD R2,R4,R4,LSL #1 
  4381. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4382. STR R3,[R11,-R8]
  4383. ADD R2,R4,R4,LSL #2 
  4384. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4385. STR R3,[R11]
  4386. MOV R3,R4,ASR #4 
  4387. STR R3,[R11,R8]! 
  4388. RSB R2,R4,R4,LSL #3 
  4389. LDR R4,[R10],R8 
  4390. ADD R4,R4,R2,ASR #4 
  4391. [OPT Z
  4392. LDR R4,[R10],R8
  4393. [OPT Z
  4394. SUBS R9,R9,#2:BNE fsloop
  4395. LDMFD SP !,{R9,R14}
  4396. MSR CPSR_f,R9
  4397. MOV PC,R14
  4398. [OPT Z
  4399. .divtable EQUD 0
  4400. EQUD (1-black%/256*2)/4*F
  4401. EQUD (2-black%/256*4)/4*F
  4402. EQUD (3-black%/256*2)/4*F
  4403. EQUD F
  4404. .evenrow_gard DCD even_gard
  4405. .oddrow_gard DCD odd_gard
  4406. .rowinc DCD 0
  4407. MRS R1,CPSR
  4408. STMFD SP !,{R1,R14}
  4409. !LDR R1,[R9,#5*8]:LDR R1,[R1] 
  4410. LDR R10,[R9,#4*8] 
  4411. LDR R11,[R9,#3*8] 
  4412. LDR R12,[R9,#2*8] 
  4413. LDR R12,[R12] 
  4414. LDR R8,[R9,#8] 
  4415. LDR R8,[R8] 
  4416. LDR R9,[R9] 
  4417. LDR R9,[R9] 
  4418. LDR R4,[R10],R8 
  4419. TEQ R8,#0
  4420. LDRPL R6,evenrow_gard
  4421. LDRMI R6,oddrow_gard
  4422. MOV R1,R1,LSL #1
  4423. LDR R7,rowinc
  4424. ADR R14,divtable
  4425. .fsloop
  4426. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4427. ADD R5,R4,#F>>3 
  4428. MOVS R5,R5,LSR #bits-2 
  4429. LDRNE R0,[R14,R5,LSL #2]
  4430. SUBNE R4,R4,R0 
  4431.  dither% 
  4432. [OPT Z
  4433. ADD R2,R4,R4,LSL #1 
  4434. ')LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4435. STR R3,[R11,-R8]
  4436. ADD R2,R4,R4,LSL #2 
  4437. *%LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4438. STR R3,[R11]
  4439. MOV R3,R4,ASR #4 
  4440. STR R3,[R11,R8]! 
  4441. RSB R2,R4,R4,LSL #3 
  4442. LDR R4,[R10],R8 
  4443. ADDS R4,R4,R2,ASR #4 
  4444. [OPT Z
  4445. LDR R4,[R10],R8
  4446. [OPT Z
  4447. 8%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4448. ADD R3,R4,#F>>3 
  4449. MOVS R3,R3,LSR #bits-2 
  4450. LDRNE R0,[R14,R3,LSL #2]
  4451. SUBNE R4,R4,R0 
  4452. R R5,R5,R3,LSL #3:LDRB R5,[R6,R5] 
  4453. MOV R2,R12,LSR #2
  4454. TST R12,#2
  4455.  R3,R5,#&F:LDRB R0,[R2]
  4456. EQ R0,R0,#&F0:
  4457. REQ R0,R0,R3
  4458. NE R0,R0,#&0F:
  4459. RNE R0,R0,R3,LSL #4
  4460. STRB R0,[R2],R7
  4461. D!MOV R3,R5,LSR #4:LDRB R0,[R2]
  4462. EQ R0,R0,#&F0:
  4463. REQ R0,R0,R3
  4464. NE R0,R0,#&0F:
  4465. RNE R0,R0,R3,LSL #4
  4466. STRB R0,[R2]
  4467. ADD R12,R12,R1
  4468.  dither% 
  4469. [OPT Z
  4470. ADD R2,R4,R4,LSL #1 
  4471. M)LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4472. STR R3,[R11,-R8]
  4473. ADD R2,R4,R4,LSL #2 
  4474. P%LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4475. STR R3,[R11]
  4476. MOV R3,R4,ASR #4 
  4477. STR R3,[R11,R8]! 
  4478. RSB R2,R4,R4,LSL #3 
  4479. LDR R4,[R10],R8 
  4480. ADD R4,R4,R2,ASR #4 
  4481. [OPT Z
  4482. LDR R4,[R10],R8
  4483. [OPT Z
  4484. SUBS R9,R9,#2:BNE fsloop
  4485. LDMFD SP !,{R9,R14}
  4486. MSR CPSR_f,R9
  4487. MOV PC,R14
  4488. [OPT Z
  4489. MRS R1,CPSR
  4490. STMFD SP !,{R1,R14}
  4491. h!LDR R1,[R9,#5*8]:LDR R1,[R1] 
  4492. LDR R10,[R9,#4*8] 
  4493. LDR R11,[R9,#3*8] 
  4494. LDR R12,[R9,#2*8] 
  4495. LDR R12,[R12] 
  4496. LDR R8,[R9,#8] 
  4497. LDR R8,[R8] 
  4498. LDR R9,[R9] 
  4499. LDR R9,[R9] 
  4500. LDR R4,[R10],R8 
  4501. MOV R7,#1 
  4502. .fsloop
  4503. t%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4504.  black% 
  4505. [OPT Z
  4506. MOV R2,R12,LSR #3
  4507.  R5,R12,#7:MOV R6,#1
  4508. LDRB R0,[R2,#-(x%+7>>3)] 
  4509. SUB R3,R4,#F 
  4510. CMP R7,#0
  4511. }"ADDNE R4,R4,#black%<<(bits-8) 
  4512. ~"ADDEQ R3,R3,#black%<<(bits-8) 
  4513. TST R0,R6,LSL R5
  4514. "ADDNE R4,R4,#black%<<(bits-8) 
  4515. "ADDEQ R3,R3,#black%<<(bits-8) 
  4516. MOVS R0,R3:RSBMI R0,R3,#0 
  4517. CMP R4,R0 
  4518. MOVCC R3,#0 
  4519. MOVCS R4,R3:MOVCS R3,#1 
  4520. MOV R7,R3 
  4521. [OPT Z
  4522. (ADD R3,R4,#F>>1:MOV R3,R3,LSR #bits 
  4523. SUB R4,R4,R3,LSL #bits
  4524. MOV R2,R12,LSR #3
  4525.  R5,R12,#7:MOV R6,#1
  4526. [OPT Z
  4527. 7LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
  4528. R R0,R0,R3,LSL R5
  4529. STRB R0,[R2]
  4530. ADD R12,R12,R1
  4531.  dither% 
  4532. [OPT Z
  4533. ADD R2,R4,R4,LSL #1 
  4534. )LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4 
  4535. STR R3,[R11,-R8]
  4536. ADD R2,R4,R4,LSL #2 
  4537. %LDR R3,[R11]:ADD R3,R3,R2,ASR #4 
  4538. STR R3,[R11]
  4539. MOV R3,R4,ASR #4 
  4540. STR R3,[R11,R8]! 
  4541. RSB R2,R4,R4,LSL #3 
  4542. LDR R4,[R10],R8 
  4543. ADD R4,R4,R2,ASR #4 
  4544. [OPT Z
  4545. LDR R4,[R10],R8
  4546. [OPT Z
  4547. SUBS R9,R9,#1:BNE fsloop
  4548. LDMFD SP !,{R9,R14}
  4549. MSR CPSR_f,R9
  4550. MOV PC,R14
  4551. [OPT Z
  4552. .sxloc DCD sx%
  4553.  col 
  4554.  input<=8 
  4555. [OPT Z
  4556. .mappix% 
  4557. LDR R0,sxloc 
  4558. LDR R1,[R9]:LDR R1,[R1] 
  4559. LDR R2,[R9,#3*8] 
  4560. LDR R5,[R9,#4*8] 
  4561. MOV R8,#0
  4562. .mappixlp
  4563. LDRB R6,[R1],#step24
  4564.  input 
  4565.  ham 
  4566. [OPT Z
  4567. ADR R9,ltable
  4568. !MOVS R7,R6,LSR #4:
  4569.  R6,R6,#15
  4570. 2LDREQ R10,[R2,R6,LSL #2]:
  4571. Q R11,R10:
  4572. Q R12,R10
  4573. &CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
  4574. &CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
  4575. &CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
  4576. ADD R3,R10,R11
  4577. ADD R3,R3,R12
  4578. MOV R3,R3,LSR #2
  4579. STMIA R5!,{R3}
  4580. SUBS R0,R0,#1:BNE mappixlp
  4581. MOV PC,R14
  4582. .ltable
  4583.  I%=0
  4584. [OPT Z
  4585. EQUD I%/15*F
  4586.  hpredict%=2 
  4587. [OPT Z
  4588. ADD R6,R6,R8
  4589.  R6,R6,#255
  4590. MOV R8,R6
  4591. [OPT Z
  4592. (LDR R7,[R2,R6,LSL #2]:STR R7,[R5],#4
  4593. SUBS R0,R0,#1:BNE mappixlp
  4594. MOV PC,R14
  4595.  bigendianbits 
  4596. [OPT Z
  4597. MOV R10,R6,LSR #4
  4598. LDR R7,[R2,R10,LSL #2]
  4599.  R10,R6,#&F
  4600. [OPT Z
  4601.  R10,R6,#&F
  4602. LDR R7,[R2,R10,LSL #2]
  4603. MOV R10,R6,LSR #4
  4604. [OPT Z
  4605. ,LDR R8,[R2,R10,LSL #2]:STMIA R5!,{R7,R8}
  4606. SUBS R0,R0,#2:BHI mappixlp
  4607. MOV PC,R14
  4608.  bigendianbits 
  4609. [OPT Z
  4610. MOV R10,R6,LSR #6
  4611. LDR R7,[R2,R10,LSL #2]
  4612.  R10,R6,#&30
  4613. LDR R8,[R2,R10,LSR #2]
  4614.  R10,R6,#&C
  4615. LDR R9,[R2,R10]
  4616.  R10,R6,#&3
  4617. [OPT Z
  4618.  R10,R6,#&3
  4619. LDR R7,[R2,R10,LSL #2]
  4620.  R10,R6,#&C
  4621. LDR R8,[R2,R10]
  4622.  R10,R6,#&30
  4623. LDR R9,[R2,R10,LSR #2]
  4624. MOV R10,R6,LSR #6
  4625. [OPT Z
  4626. 4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
  4627. SUBS R0,R0,#4:BHI mappixlp
  4628. MOV PC,R14
  4629.  bigendianbits 
  4630. [OPT Z
  4631.  R10,R6,#&80
  4632. LDR R7,[R2,R10,LSR #5]
  4633.  R10,R6,#&40
  4634. LDR R8,[R2,R10,LSR #4]
  4635.  R10,R6,#&20
  4636. LDR R9,[R2,R10,LSR #3]
  4637.  R10,R6,#&10
  4638. 4LDR R10,[R2,R10,LSR #2]:STMIA R5!,{R7,R8,R9,R10}
  4639.  R10,R6,#&8
  4640. LDR R7,[R2,R10,LSR #1]
  4641.  R10,R6,#&4
  4642. LDR R8,[R2,R10]
  4643.  R10,R6,#&2
  4644. LDR R9,[R2,R10,LSL #1]
  4645.  R10,R6,#&1
  4646. [OPT Z
  4647.  R10,R6,#&1
  4648. LDR R7,[R2,R10,LSL #2]
  4649.  R10,R6,#&2
  4650. LDR R8,[R2,R10,LSL #1]
  4651.  R10,R6,#&4
  4652. LDR R9,[R2,R10]
  4653.  R10,R6,#&8
  4654. 04LDR R10,[R2,R10,LSR #1]:STMIA R5!,{R7,R8,R9,R10}
  4655.  R10,R6,#&10
  4656. LDR R7,[R2,R10,LSR #2]
  4657.  R10,R6,#&20
  4658. LDR R8,[R2,R10,LSR #3]
  4659.  R10,R6,#&40
  4660. LDR R9,[R2,R10,LSR #4]
  4661. MOV R10,R6,LSR #7
  4662. [OPT Z
  4663. ;4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
  4664. SUBS R0,R0,#8:BHI mappixlp
  4665. MOV PC,R14
  4666. [OPT Z
  4667. .mappix% 
  4668. LDR R0,sxloc 
  4669. LDR R1,[R9]:LDR R1,[R1] 
  4670. LDR R2,[R9,#8]:LDR R2,[R2] 
  4671. LDR R3,[R9,#4*8] 
  4672. LDR R4,[R9,#3*8] 
  4673. LDR R5,[R9,#2*8] 
  4674. LDR R6,[R9,#5*8] 
  4675. LDR R7,[R9,#6*8] 
  4676. LDR R8,[R9,#7*8] 
  4677. CMP R1,R2
  4678. ADDEQ R2,R2,#1
  4679. .mappixlp
  4680. N.LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
  4681. O>LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
  4682. R R9,R9,R10
  4683.  R10,R9,#255:LDR R10,[R3,R10,LSL #2]
  4684. Q<MOV R11,R9,LSR #8:
  4685.  R11,R11,#255:LDR R11,[R4,R11,LSL #2]
  4686. R.MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
  4687. S3ADD R10,R10,R11:ADD R10,R10,R12:STMIA R8!,{R10}
  4688. SUBS R0,R0,#1:BNE mappixlp
  4689. MOV PC,R14
  4690. [OPT Z
  4691. .mappix% 
  4692. LDR R0,sxloc 
  4693. [!LDR R1,[R9,#2*8]:LDR R1,[R1] 
  4694. LDR R2,[R9,#8]:LDR R2,[R2] 
  4695. LDR R3,[R9]:LDR R3,[R3] 
  4696. LDR R4,[R9,#5*8] 
  4697. LDR R5,[R9,#4*8] 
  4698. LDR R6,[R9,#3*8] 
  4699. LDR R7,[R9,#6*8] 
  4700. MRS R11,CPSR
  4701. STMFD SP !,{R11,R14}
  4702. d$MOV r11,#0:MOV R12,#0:MOV R14,#0
  4703. .mappixlp
  4704. fCLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
  4705.  hpredict%=2 
  4706. [OPT Z
  4707. ADD r8,r8,r11
  4708.  r8,r8,#255
  4709. MOV r11,r8
  4710. ADD r9,r9,r12
  4711.  r9,r9,#255
  4712. MOV r12,r9
  4713. ADD r10,r10,r14
  4714.  r10,r10,#255
  4715. MOV r14,r10
  4716. [OPT Z
  4717. vGLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4718. w-ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
  4719. SUBS R0,R0,#1:BNE mappixlp
  4720. LDMFD SP !,{R0,R14}
  4721. MSR CPSR_f,R0
  4722. MOV PC,R14
  4723. [OPT Z
  4724. .mappix% 
  4725. LDR R0,sxloc 
  4726. !LDR R1,[R9,#2*8]:LDR R1,[R1] 
  4727. LDR R2,[R9,#8]:LDR R2,[R2] 
  4728. LDR R3,[R9]:LDR R3,[R3] 
  4729. LDR R4,[R9,#5*8] 
  4730. LDR R5,[R9,#4*8] 
  4731. LDR R6,[R9,#3*8] 
  4732. LDR R7,[R9,#6*8] 
  4733. MRS R11,CPSR
  4734. STMFD SP !,{R11,R14}
  4735. ?MOV r11,#colourindex 
  4736.  255:ADD r11,r11,#colourindex 
  4737.  &ff00
  4738. .mappixlp
  4739. @LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
  4740.  r8,r8,r11:
  4741.  r9,r9,r11:
  4742.  r10,r10,r11
  4743. GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4744. -ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
  4745. SUBS R0,R0,#1:BNE mappixlp
  4746. LDMFD SP !,{R0,R14}
  4747. MSR CPSR_f,R0
  4748. MOV PC,R14
  4749. [OPT Z
  4750. .mappix% 
  4751. LDR R0,sxloc 
  4752. LDR R1,[R9]:LDR R1,[R1] 
  4753. LDR R4,[R9,#1*8] 
  4754. LDR R7,[R9,#8*8] 
  4755. .mappixlp
  4756. LDRB R8,[R1],#2 
  4757. >LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4758. SUBS R0,R0,#1:BNE mappixlp
  4759. MOV PC,R14
  4760. [OPT Z
  4761. .mappix% 
  4762. LDR R0,sxloc 
  4763. LDR R1,[R9]:LDR R1,[R1] 
  4764. ADD R1,R1,#1 
  4765. LDR R4,[R9,#1*8] 
  4766. LDR R7,[R9,#8*8] 
  4767. .mappixlp
  4768. LDRB R8,[R1],#2 
  4769. >LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4770. SUBS R0,R0,#1:BNE mappixlp
  4771. MOV PC,R14
  4772. [OPT Z
  4773. .mappix% 
  4774. LDR R0,sxloc 
  4775. LDR R1,[R9]:LDR R1,[R1] 
  4776. ADD R1,R1,#1 
  4777. LDR R4,[R9,#1*8] 
  4778. LDR R7,[R9,#8*8] 
  4779. .mappixlp
  4780. LDRB R8,[R1],#2 
  4781.  R8,R8,#ymax%
  4782. >LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4783. SUBS R0,R0,#1:BNE mappixlp
  4784. MOV PC,R14
  4785.  xmul%=2 
  4786.  xdiv%=1 
  4787. [OPT Z
  4788. .xsample%
  4789. LDR R0,[R9]:LDR R0,[R0] 
  4790. LDR R1,[R9,#8] 
  4791. LDR R2,[R9,#2*8] 
  4792. SUBS R0,R0,#2
  4793. BEQ xdonediv
  4794. BMI xdonediv
  4795. .xsamplelp
  4796. LDMIA R1,{R5,R6}
  4797. ADD R6,R6,R5
  4798. MOV R6,R6,LSR #1
  4799. STMIA R2!,{R5,R6}
  4800. ADD R1,R1,#4
  4801. SUBS R0,R0,#2:BGT xsamplelp
  4802. .xdonediv
  4803. LDMIA R1,{R5}
  4804. MOV R6,R5
  4805. STMIA R2!,{R5,R6}
  4806. MOV PC,R14
  4807. [OPT Z
  4808. .xsample%
  4809. LDR R0,[R9]:LDR R0,[R0] 
  4810. LDR R1,[R9,#8] 
  4811. LDR R2,[R9,#2*8] 
  4812. !LDR R3,[R9,#3*8]:LDR R3,[R3] 
  4813. !LDR R4,[R9,#4*8]:LDR R4,[R4] 
  4814. MOV R11,R4
  4815. .xsamplelp
  4816. LDMIA R1,{R5}
  4817. ,SUBS R11,R11,#1:
  4818. Q R11,R4:ADDEQ R1,R1,#4
  4819. SUBS R12,R3,#1 
  4820. BEQ xdonediv
  4821. .xdivlp
  4822. CMP R12,R11
  4823. BCC xdivlp2
  4824. #LDMIA R1!,{R8}:MLA R5,R8,R11,R5
  4825. SUBS R12,R12,R11:MOV R11,R4
  4826. BNE xdivlp
  4827. B xdonediv
  4828. .xdivlp2
  4829. LDMIA R1,{R8}
  4830. ,SUBS R11,R11,#1:
  4831. Q R11,R4:ADDEQ R1,R1,#4
  4832. ADD R5,R5,R8
  4833. SUBS R12,R12,#1:BNE xdivlp
  4834. .xdonediv
  4835. STMIA R2!,{R5}
  4836. SUBS R0,R0,#1:BPL xsamplelp
  4837. MOV PC,R14
  4838.  input<=8 
  4839. [OPT Z
  4840. .mappix% 
  4841. LDR R0,sxloc 
  4842. LDR R1,[R9]:LDR R1,[R1] 
  4843. LDR R2,[R9,#3*8] 
  4844. LDR R3,[R9,#2*8] 
  4845. LDR R4,[R9,#8] 
  4846. LDR R5,[R9,#4*8] 
  4847. MOV R10,#0
  4848. .mappixlp
  4849. LDRB R6,[R1],#step24
  4850.  input 
  4851.  ham 
  4852. [OPT Z
  4853. ADR R9,ltable
  4854. !MOVS R7,R6,LSR #4:
  4855.  R6,R6,#15
  4856. NLDREQ R10,[R2,R6,LSL #2]:LDREQ R11,[R3,R6,LSL #2]:LDREQ R12,[R4,R6,LSL #2]
  4857. &CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
  4858. &CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
  4859. &CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
  4860. STMIA R5!,{R10,R11,R12}
  4861. SUBS R0,R0,#1:BNE mappixlp
  4862. MOV PC,R14
  4863. .ltable
  4864.  I%=0
  4865. [OPT Z
  4866. EQUD I%/15*F
  4867.  hpredict%=2 
  4868. [OPT Z
  4869. ADD R6,R6,R10
  4870.  R6,R6,#255
  4871. MOV R10,R6
  4872. [OPT Z
  4873. "ELDR R7,[R2,R6,LSL #2]:LDR R8,[R3,R6,LSL #2]:LDR R9,[R4,R6,LSL #2]
  4874. STMIA R5!,{R7,R8,R9}
  4875. SUBS R0,R0,#1:BNE mappixlp
  4876. MOV PC,R14
  4877.  bigendianbits 
  4878. [OPT Z
  4879. MOV R10,R6,LSR #4
  4880. ,HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4881. STMIA R5!,{R7,R8,R9}
  4882.  R10,R6,#&F
  4883. [OPT Z
  4884.  R10,R6,#&F
  4885. 3HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4886. STMIA R5!,{R7,R8,R9}
  4887. MOV R10,R6,LSR #4
  4888. [OPT Z
  4889. 9HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4890. STMIA R5!,{R7,R8,R9}
  4891. SUBS R0,R0,#2:BHI mappixlp
  4892. MOV PC,R14
  4893.  bigendianbits 
  4894. [OPT Z
  4895. MOV R10,R6,LSR #6
  4896. BHLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4897. STMIA R5!,{R7,R8,R9}
  4898.  R10,R6,#&30
  4899. EHLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4900. STMIA R5!,{R7,R8,R9}
  4901.  R10,R6,#&C
  4902. H3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4903. STMIA R5!,{R7,R8,R9}
  4904.  R10,R6,#&3
  4905. [OPT Z
  4906.  R10,R6,#&3
  4907. OHLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4908. STMIA R5!,{R7,R8,R9}
  4909.  R10,R6,#&C
  4910. R3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4911. STMIA R5!,{R7,R8,R9}
  4912.  R10,R6,#&30
  4913. UHLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4914. STMIA R5!,{R7,R8,R9}
  4915. MOV R10,R6,LSR #6
  4916. [OPT Z
  4917. [HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4918. STMIA R5!,{R7,R8,R9}
  4919. SUBS R0,R0,#4:BHI mappixlp
  4920. MOV PC,R14
  4921.  bigendianbits 
  4922. [OPT Z
  4923.  R10,R6,#&80
  4924. dHLDR R7,[R2,R10,LSR #5]:LDR R8,[R3,R10,LSR #5]:LDR R9,[R4,R10,LSR #5]
  4925. STMIA R5!,{R7,R8,R9}
  4926.  R10,R6,#&40
  4927. gHLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
  4928. STMIA R5!,{R7,R8,R9}
  4929.  R10,R6,#&20
  4930. jHLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
  4931. STMIA R5!,{R7,R8,R9}
  4932.  R10,R6,#&10
  4933. mHLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4934. STMIA R5!,{R7,R8,R9}
  4935.  R10,R6,#&8
  4936. pHLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
  4937. STMIA R5!,{R7,R8,R9}
  4938.  R10,R6,#&4
  4939. s3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4940. STMIA R5!,{R7,R8,R9}
  4941.  R10,R6,#&2
  4942. vHLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
  4943. STMIA R5!,{R7,R8,R9}
  4944.  R10,R6,#&1
  4945. [OPT Z
  4946.  R10,R6,#&1
  4947. }HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4948. STMIA R5!,{R7,R8,R9}
  4949.  R10,R6,#&2
  4950. HLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
  4951. STMIA R5!,{R7,R8,R9}
  4952.  R10,R6,#&4
  4953. 3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4954. STMIA R5!,{R7,R8,R9}
  4955.  R10,R6,#&8
  4956. HLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
  4957. STMIA R5!,{R7,R8,R9}
  4958.  R10,R6,#&10
  4959. HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4960. STMIA R5!,{R7,R8,R9}
  4961.  R10,R6,#&20
  4962. HLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
  4963. STMIA R5!,{R7,R8,R9}
  4964.  R10,R6,#&40
  4965. HLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
  4966. STMIA R5!,{R7,R8,R9}
  4967. MOV R10,R6,LSR #7
  4968. [OPT Z
  4969. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4970. STMIA R5!,{R7,R8,R9}
  4971. SUBS R0,R0,#8:BHI mappixlp
  4972. MOV PC,R14
  4973. [OPT Z
  4974. .mappix% 
  4975. LDR R0,sxloc 
  4976. LDR R1,[R9]:LDR R1,[R1] 
  4977. LDR R2,[R9,#8]:LDR R2,[R2] 
  4978. LDR R3,[R9,#4*8] 
  4979. LDR R4,[R9,#3*8] 
  4980. LDR R5,[R9,#2*8] 
  4981. LDR R6,[R9,#5*8] 
  4982. LDR R7,[R9,#6*8] 
  4983. LDR R8,[R9,#7*8] 
  4984. CMP R1,R2
  4985. ADDEQ R2,R2,#1
  4986. .mappixlp
  4987. .LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
  4988. >LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
  4989. R R9,R9,R10
  4990.  R10,R9,#255:LDR R10,[R3,R10,LSL #2]
  4991. <MOV R11,R9,LSR #8:
  4992.  R11,R11,#255:LDR R11,[R4,R11,LSL #2]
  4993. .MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
  4994. STMIA R8!,{R10,R11,R12}
  4995. SUBS R0,R0,#1:BNE mappixlp
  4996. MOV PC,R14
  4997. [OPT Z
  4998. .mappix% 
  4999. LDR R0,sxloc 
  5000. !LDR R1,[R9,#2*8]:LDR R1,[R1] 
  5001. LDR R2,[R9,#8]:LDR R2,[R2] 
  5002. LDR R3,[R9]:LDR R3,[R3] 
  5003. LDR R4,[R9,#5*8] 
  5004. LDR R5,[R9,#4*8] 
  5005. LDR R6,[R9,#3*8] 
  5006. LDR R7,[R9,#6*8] 
  5007. MRS R11,CPSR
  5008. STMFD SP !,{R11,R14}
  5009. $MOV r11,#0:MOV R12,#0:MOV R14,#0
  5010. .mappixlp
  5011. CLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
  5012.  hpredict%=2 
  5013. [OPT Z
  5014. ADD r8,r8,r11
  5015.  r8,r8,#255
  5016. MOV r11,r8
  5017. ADD r9,r9,r12
  5018.  r9,r9,#255
  5019. MOV r12,r9
  5020. ADD r10,r10,r14
  5021.  r10,r10,#255
  5022. MOV r14,r10
  5023. [OPT Z
  5024. GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  5025. STMIA R7!,{R8,R9,R10}
  5026. SUBS R0,R0,#1:BNE mappixlp
  5027. LDMFD SP !,{R0,R14}
  5028. MSR CPSR_f,R0
  5029. MOV PC,R14
  5030. [OPT Z
  5031. .mappix% 
  5032. LDR R0,sxloc 
  5033. !LDR R1,[R9,#2*8]:LDR R1,[R1] 
  5034. LDR R2,[R9,#8]:LDR R2,[R2] 
  5035. LDR R3,[R9]:LDR R3,[R3] 
  5036. LDR R4,[R9,#5*8] 
  5037. LDR R5,[R9,#4*8] 
  5038. LDR R6,[R9,#3*8] 
  5039. LDR R7,[R9,#6*8] 
  5040. MRS R11,CPSR
  5041. STMFD SP !,{R14}
  5042. ?MOV r11,#colourindex 
  5043.  255:ADD r11,r11,#colourindex 
  5044.  &ff00
  5045. .mappixlp
  5046. @LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
  5047.  r8,r8,r11:
  5048.  r9,r9,r11:
  5049.  r10,r10,r11
  5050. GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  5051. STMIA R7!,{R8,R9,R10}
  5052. SUBS R0,R0,#1:BNE mappixlp
  5053. LDMFD SP !,{R0,R14}
  5054. MSR CPSR_f,R0
  5055. MOV PC,R14
  5056. [OPT Z
  5057. .mappix% 
  5058. LDR R0,sxloc 
  5059. LDR R1,[R9]:LDR R1,[R1] 
  5060. LDR R2,[R9,#1*8] 
  5061. LDR R3,[R9,#2*8] 
  5062. LDR R5,[R9,#4*8] 
  5063. LDR R6,[R9,#5*8] 
  5064. LDR R7,[R9,#6*8] 
  5065. LDR R9,[R9,#8*8] 
  5066. MRS R8,CPSR
  5067. STMFD SP !,{R8,R14}
  5068. .mappixlp
  5069. LDMIA R1!,{R4,R10} 
  5070.  R8,R4,#&C000
  5071. MOV R8,R8,LSR #8
  5072.  R14,R4,#&C0000000
  5073. R R8,R8,R14,LSR #16+8+2
  5074.  R14,R10,#&C000
  5075. R R8,R8,R14,LSR #8+4
  5076. R R8,R8,R10,LSR #16+8+6 
  5077.  R11,R4,#&3000
  5078. MOV R11,R11,LSR #6
  5079.  R14,R4,#&30000000
  5080. R R11,R11,R14,LSR #16+6+2
  5081.  R14,R10,#&3000
  5082. R R11,R11,R14,LSR #6+4
  5083.  R14,R10,#&30000000
  5084. R R11,R11,R14,LSR #16+6+6 
  5085.  R12,R4,#&FF 
  5086. LDR R12,[R2,R12,LSL #2] 
  5087. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5088. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5089. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5090. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5091. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5092.  R12,R4,#&FF 
  5093. LDR R12,[R2,R12,LSL #2] 
  5094. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5095. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5096. MOV R4,R4,LSR #16
  5097.  R12,R4,#&FF 
  5098. LDR R12,[R2,R12,LSL #2] 
  5099. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5100. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5101. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5102. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5103.  8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5104.  R12,R4,#&FF 
  5105. LDR R12,[R2,R12,LSL #2] 
  5106. #+LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5107. $8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5108.  R12,R10,#&FF 
  5109. LDR R12,[R2,R12,LSL #2] 
  5110. ',LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5111. (8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5112. )*LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5113. *,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5114. +8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5115.  R12,R10,#&FF 
  5116. LDR R12,[R2,R12,LSL #2] 
  5117. .+LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5118. /8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5119. MOV R10,R10,LSR #16
  5120.  R12,R10,#&FF 
  5121. LDR R12,[R2,R12,LSL #2] 
  5122. 3,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5123. 48MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5124. 5*LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5125. 6,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5126. 78MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5127.  R12,R10,#&FF 
  5128. LDR R12,[R2,R12,LSL #2] 
  5129. :+LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5130. ;8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5131. SUBS R0,R0,#4:BNE mappixlp
  5132. LDMFD SP !,{R0,R14}
  5133. MSR CPSR_f,R0
  5134. MOV PC,R14
  5135. [OPT Z
  5136. .mappix% 
  5137. LDR R0,sxloc 
  5138. LDR R1,[R9]:LDR R1,[R1] 
  5139. LDR R2,[R9,#1*8] 
  5140. LDR R3,[R9,#2*8] 
  5141. LDR R4,[R9,#3*8] 
  5142. LDR R5,[R9,#4*8] 
  5143. LDR R6,[R9,#5*8] 
  5144. LDR R7,[R9,#6*8] 
  5145. LDR R8,[R9,#7*8] 
  5146. LDR R9,[R9,#8*8] 
  5147. MRS R10,CPSR
  5148. STMFD SP !,{R10,R14}
  5149. .mappixlp
  5150. LDR R10,[R1],#4 
  5151.  R11,R10,#&FF00 
  5152. LDR R11,[R2,R11,LSR #6]
  5153.  R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
  5154.  R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
  5155. V8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5156.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5157.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5158. Y8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5159.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
  5160.  R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
  5161. \8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5162.  R11,R10,#&FF000000 
  5163. LDR R11,[R2,R11,LSR #22]
  5164.  R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
  5165.  R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
  5166. a8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5167.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5168.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5169. d8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5170.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
  5171.  R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
  5172. g8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5173. SUBS R0,R0,#2:BNE mappixlp
  5174. LDMFD SP !,{R0,R14}
  5175. MSR CPSR_f,R0
  5176. MOV PC,R14
  5177. [OPT Z
  5178. .mappix% 
  5179. LDR R0,sxloc 
  5180. LDR R1,[R9]:LDR R1,[R1] 
  5181. LDR R2,[R9,#1*8] 
  5182. LDR R3,[R9,#2*8] 
  5183. LDR R5,[R9,#4*8] 
  5184. LDR R6,[R9,#5*8] 
  5185. LDR R7,[R9,#6*8] 
  5186. LDR R9,[R9,#8*8] 
  5187. MRS R10,CPSR
  5188. STMFD SP !,{R10,R14}
  5189. .mappixlp
  5190. LDR R10,[R1],#4 
  5191.  R11,R10,#&FF00 
  5192. LDR R11,[R2,R11,LSR #6]
  5193.  R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
  5194. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5195.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5196.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5197. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5198.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
  5199. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5200.  R11,R10,#&FF000000 
  5201. LDR R11,[R2,R11,LSR #22]
  5202.  R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
  5203. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5204.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5205.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5206. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5207.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
  5208. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5209. SUBS R0,R0,#2:BNE mappixlp
  5210. LDMFD SP !,{R0,R14}
  5211. MSR CPSR_f,R0
  5212. MOV PC,R14
  5213. [OPT Z
  5214. .mappix% 
  5215. LDR R0,sxloc 
  5216. LDR R1,[R9]:LDR R1,[R1] 
  5217. LDR R2,[R9,#1*8] 
  5218. LDR R3,[R9,#2*8] 
  5219. LDR R5,[R9,#4*8] 
  5220. LDR R6,[R9,#5*8] 
  5221. LDR R7,[R9,#6*8] 
  5222. LDR R9,[R9,#8*8] 
  5223. MRS R10,CPSR
  5224. STMFD SP !,{R10,R14}
  5225. .mappixlp
  5226. LDR R10,[R1],#2 
  5227.  R11,R10,#ymax% 
  5228. LDR R11,[R2,R11,LSL #2]
  5229.  R8,R10,#((1<<vbits%)-1)<<(ybits%+ubits%) 
  5230.  R10,R10,#((1<<ubits%)-1)<<ybits% 
  5231. 9LDR R12,[R7,R8,LSR #ybits%+ubits%-2]:ADDS R14,R12,R11
  5232. 9MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 
  5233. 8LDR R12,[R5,R8,LSR #ybits%+ubits%-2]:ADD R14,R12,R11
  5234. 3LDR R12,[R6,R10,LSR #ybits%-2]:ADDS R14,R14,R12
  5235. 9MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 
  5236. 3LDR R12,[R3,R10,LSR #ybits%-2]:ADDS R14,R12,R11
  5237. 9MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4 
  5238. SUBS R0,R0,#1:BNE mappixlp
  5239. LDMFD SP !,{R0,R14}
  5240. MSR CPSR_f,R0
  5241. MOV PC,R14
  5242.  xmul%=2 
  5243.  xdiv%=1 
  5244. [OPT Z
  5245. .xsample%
  5246. LDR R0,[R9]:LDR R0,[R0] 
  5247. LDR R1,[R9,#8] 
  5248. LDR R2,[R9,#2*8] 
  5249. SUBS R0,R0,#2
  5250. BEQ xdonediv
  5251. BMI xdonediv
  5252. .xsamplelp
  5253. !LDMIA R1,{R5,R6,R7,R8,R9,R10}
  5254. ADD R8,R8,R5
  5255. MOV R8,R8,LSR #1
  5256. ADD R9,R9,R6
  5257. MOV R9,R9,LSR #1
  5258. ADD R10,R10,R7
  5259. MOV R10,R10,LSR #1
  5260. "STMIA R2!,{R5,R6,R7,R8,R9,R10}
  5261. ADD R1,R1,#12
  5262. SUBS R0,R0,#2:BGT xsamplelp
  5263. .xdonediv
  5264. LDMIA R1,{R5,R6,R7}
  5265. MOV R8,R5
  5266. MOV R9,R6
  5267. MOV R10,R7
  5268. "STMIA R2!,{R5,R6,R7,R8,R9,R10}
  5269. MOV PC,R14
  5270. [OPT Z
  5271. .xsample%
  5272. LDR R0,[R9]:LDR R0,[R0] 
  5273. LDR R1,[R9,#8] 
  5274. LDR R2,[R9,#2*8] 
  5275. !LDR R3,[R9,#3*8]:LDR R3,[R3] 
  5276. !LDR R4,[R9,#4*8]:LDR R4,[R4] 
  5277. MOV R11,R4
  5278. .xsamplelp
  5279. LDMIA R1,{R5,R6,R7}
  5280. -SUBS R11,R11,#1:
  5281. Q R11,R4:ADDEQ R1,R1,#12
  5282. SUBS R12,R3,#1 
  5283. BEQ xdonediv
  5284. .xdivlp
  5285. CMP R12,R11
  5286. BCC xdivlp2
  5287. MLDMIA R1!,{R8,R9,R10}:MLA R5,R8,R11,R5:MLA R6,R9,R11,R6:MLA R7,R10,R11,R7
  5288. SUBS R12,R12,R11:MOV R11,R4
  5289. BNE xdivlp
  5290. B xdonediv
  5291. .xdivlp2
  5292. LDMIA R1,{R8,R9,R10}
  5293. -SUBS R11,R11,#1:
  5294. Q R11,R4:ADDEQ R1,R1,#12
  5295. +ADD R5,R5,R8:ADD R6,R6,R9:ADD R7,R7,R10
  5296. SUBS R12,R12,#1:BNE xdivlp
  5297. .xdonediv
  5298. STMIA R2!,{R5,R6,R7}
  5299. SUBS R0,R0,#1:BPL xsamplelp
  5300. MOV PC,R14
  5301.  compression=5 
  5302. [OPT Z
  5303. .firstcode DCD 0
  5304. .oldcode DCD 0
  5305. .codesize DCD setcodes%+1
  5306. .stack DCD stk%
  5307. .sp DCD stk%
  5308. .maxcode DCD clearcode%+2
  5309. !.maxcodesize DCD 2*clearcode%
  5310. .LZWdecode%
  5311. @LDR R2,firstcode:LDR R3,oldcode:LDR R4,stack:LDR R5,codesize
  5312. /LDR R6,sp:LDR R7,maxcode:LDR R8,maxcodesize
  5313. LDR R10,[R9]:LDR R10,[R10] 
  5314. "LDR R11,[R9,#8]:LDR R11,[R11] 
  5315. MRS R12,CPSR
  5316. STMFD SP !,{R12,R14}
  5317. LDR R12,[R9,#24] 
  5318. .lzwloop
  5319. CMP R6,R4
  5320. BHI lzwunstack
  5321. .lzwengine
  5322. BL getcode
  5323. CMP R0,#clearcode%
  5324. BEQ lzwclear
  5325. MOV R1,R0 
  5326. CMP R0,R7 
  5327. STRCSB R2,[R6],#1 
  5328. MOVCS R0,R3 
  5329. CMP R0,#clearcode%
  5330. BCC lzwdonepush
  5331. .lzwpushtable
  5332. LDR R14,[R12,R0,LSL #2] 
  5333. STRB R14,[R6],#1 
  5334. MOV R0,R14,LSR #16 
  5335. CMP R0,#clearcode%
  5336. BCS lzwpushtable
  5337. .lzwdonepush
  5338. LDR R2,[R12,R0,LSL #2]
  5339. BIC R2,R2,#&FF0000
  5340. BIC R2,R2,#&FF000000 
  5341. STRB R2,[R6],#1 
  5342. CMP R7,#4096
  5343. BCS lzwnocode
  5344. R R0,R2,R3,LSL #16
  5345. STR R0,[R12,R7,LSL #2] 
  5346. ADD R7,R7,#1 
  5347. CMP R7,R8
  5348. BCC lzwnocode 
  5349. CMP R8,#4096 
  5350. ADDCC R5,R5,#1 
  5351. MOVCC R8,R8,LSL #1 
  5352.  flag=1500 
  5353. [OPT Z
  5354. RCC R8,R8,#1
  5355. [OPT Z
  5356. .lzwnocode
  5357. MOV R3,R1 
  5358. CMP R6,R4 
  5359. BLS lzwengine
  5360. .lzwunstack
  5361. LDRB R0,[R6,#-1]! 
  5362. .lzwloopend
  5363. STRB R0,[R11],#1
  5364. SUBS R10,R10,#1
  5365. BNE lzwloop
  5366. 43STR R2,firstcode:STR R3,oldcode:STR R5,codesize
  5367. 5/STR R6,sp:STR R7,maxcode:STR R8,maxcodesize
  5368. LDMFD SP !,{R8,R14}
  5369. MSR CPSR_f,R8
  5370. MOV PC,R14
  5371. .lzwclear
  5372. MOV R0,#0
  5373. MOV R3,R12
  5374. .lzwdefaulttable
  5375. STR R0,[R3],#4
  5376. >#ADD R0,R0,#1:CMP R0,#clearcode%
  5377. BCC lzwdefaulttable
  5378. MOV R5,#setcodes%+1
  5379. MOV R7,#clearcode%
  5380. MOV R8,R7,LSL #1 
  5381.  flag=1500 
  5382. [OPT Z
  5383. SUB R8,R8,#1
  5384. [OPT Z
  5385. ADD R7,R7,#2 
  5386. BL getcode
  5387. MOV R2,R0 
  5388. MOV R3,R0 
  5389. MOV R6,R4 
  5390. B lzwloopend
  5391. .curbit DCD 0
  5392. .lastbit DCD 0
  5393. .buf DCD buf%
  5394. .getcode
  5395. STMFD SP !,{R6,R7,R8}
  5396. ADR R6,curbit
  5397. LDMIA R6,{R6,R7,R8}
  5398. ADD R1,R5,R6 
  5399. CMP R1,R7
  5400. BCS needmoredata
  5401. .simplecode
  5402. ADD R7,R8,R6,LSR #3
  5403. BIC R7,R7,#3
  5404. LDMIA R7,{R0,R7}
  5405.  flag=1500 
  5406. [OPT Z
  5407.  R1,R0,R0,ROR #16
  5408. BIC R1,R1,#&FF0000
  5409. MOV R0,R0,ROR #8
  5410.  R0,R0,R1,LSR #8
  5411.  R1,R7,R7,ROR #16
  5412. BIC R1,R1,#&FF0000
  5413. MOV R7,R7,ROR #8
  5414.  R7,R7,R1,LSR #8
  5415. S R1,R6,#31:MOVNE R0,R0,LSL R1:RSBNE R1,R1,#32:
  5416. RNE R0,R0,R7,LSR R1
  5417. RSB R1,R5,#32
  5418. MOV R0,R0,LSR R1
  5419. [OPT Z
  5420. S R1,R6,#31:MOVNE R0,R0,LSR R1:RSBNE R1,R1,#32:
  5421. RNE R0,R0,R7,LSL R1
  5422. p!MVN R1,#0:BIC R0,R0,R1,LSL R5
  5423. [OPT Z
  5424. ADD R6,R6,R5
  5425. STR R6,curbit
  5426. LDMFD SP !,{R6,R7,R8}
  5427. MOV PC,R14
  5428. .needmoredata
  5429. STMFD SP !,{R2,R3,R4,R14}
  5430. MOV R3,R7,LSR #3
  5431. SUB R0,R3,#2 
  5432. LDRB R0,[R8,R0]
  5433. STRB R0,[R8]
  5434. SUB R0,R3,#1 
  5435. LDRB R0,[R8,R0]
  5436. STRB R0,[R8,#1]
  5437. LDR R1,[R9,#16]
  5438. LDR R1,[R1] 
  5439.  flag=1500 
  5440. [OPT Z
  5441. MOV R0,#256
  5442. MOV R3,#256
  5443. [OPT Z
  5444. BL bytefromcache%
  5445. MOVS R3,R0 
  5446. BEQ simplecode1
  5447. [OPT Z
  5448. SUB R6,R6,R7 
  5449. ADD R6,R6,#16
  5450. ADD R0,R0,#2 
  5451. MOV R7,R0,LSL #3
  5452. STR R7,lastbit
  5453. ADD R2,R8,#2 
  5454. BL multibytefromcache%
  5455. .simplecode1
  5456. LDMFD SP !,{R2,R3,R4,R14}
  5457. B simplecode
  5458.  range% 
  5459. [OPT Z
  5460. .maxmin%
  5461. LDR R0,[R9]:LDR R0,[R0] 
  5462. LDR R1,[R9,#8] 
  5463. LDR R2,min
  5464. LDR R3,max
  5465. .maxminlp
  5466. LDR R4,[R1],#4
  5467. CMP R4,R3:MOVCS R3,R4 
  5468. CMP R4,R2:MOVCC R2,R4 
  5469. SUBS R0,R0,#1:BNE maxminlp
  5470. STR R2,min
  5471. STR R3,max
  5472. MOV PC,R14
  5473. .min DCD F
  5474. .max DCD 0
  5475.  sharpen% 
  5476. "sharp=(col+1)*4:
  5477.  sharpen%>0 
  5478.  sharpen%<>8 sharpmul%=F/(sharpen%-8)
  5479. sharpmul%=F/(8-sharpen%)
  5480. [OPT Z
  5481. .sharp%
  5482. LDR R0,[R9]:LDR R0,[R0] 
  5483. LDR R1,[R9,#8] 
  5484. LDR R2,[R9,#16] 
  5485. LDR R3,[R9,#24] 
  5486. LDR R4,[R9,#32] 
  5487.  sharpen% 
  5488.  8,9,12,16,24
  5489. [OPT Z
  5490. MOV R8,#sharpmul% 
  5491. R R8,R8,#sharpmul% 
  5492.  &FF00
  5493. #MOV R9,#(sharpmul% >> 16) 
  5494. R R9,R9,#(sharpmul% >> 16) 
  5495.  &FF00
  5496. [OPT Z
  5497. .sharplp
  5498. LDR R5,[R1,#-sharp]
  5499. #LDR R6,[R1,#sharp]:ADD R5,R5,R6
  5500. LDR R6,[R1],#4:ADD R5,R5,R6
  5501. $LDR R6,[R3,#-sharp]:ADD R5,R5,R6
  5502. #LDR R6,[R3,#sharp]:ADD R5,R5,R6
  5503. LDR R6,[R3],#4:ADD R5,R5,R6
  5504. $LDR R6,[R2,#-sharp]:ADD R5,R5,R6
  5505. $LDR R6,[R2,#sharp]:ADD R5,R5,R6 
  5506. LDR R6,[R2],#4 
  5507. MOV R6,R6,LSR #1
  5508. MOV R7,#
  5509.  sharpen%
  5510. MUL R7,R6,R7 
  5511.  sharpen%>0 
  5512. [OPT Z
  5513. SUBS R5,R7,R5,LSR #1
  5514. MOVCC R5,#0 
  5515. [OPT Z
  5516. ADD R5,R7,R5,LSR #1
  5517.  sharpen% 
  5518. [OPT Z
  5519. MOV R6,R5,LSL #1
  5520. [OPT Z
  5521. MOV R6,R5
  5522. [OPT Z
  5523. MOV R6,R5,LSR #1
  5524. [OPT Z
  5525. MOV R6,R5,LSR #2
  5526.  -8,24
  5527. [OPT Z
  5528. MOV R6,R5,LSR #3
  5529. [OPT Z
  5530. MOV R6,R5,LSR #16
  5531.  R5,R5,R6,LSL #16
  5532. MUL R7,R8,R5
  5533. MUL R5,R9,R5
  5534. MUL R10,R6,R8
  5535. MUL R6,R9,R6
  5536. ADDS R10,R5,R10
  5537. ADDCS R6,R6,#&10000
  5538. ADDS R7,R7,R10,LSL #16
  5539. ADC R6,R6,R10,LSR #16
  5540. MOV R6,R6,LSL #(32-27)
  5541. RS R6,R6,R7,LSR #27
  5542. ADDCS R6,R6,#1 
  5543.  sharpen%>0 
  5544. [OPT Z
  5545. CMP R6,#F:MOVCS R6,#F
  5546. [OPT Z
  5547. STR R6,[R4],#4
  5548. SUBS R0,R0,#1
  5549. BNE sharplp
  5550. MOV PC,R14
  5551.  hist%
  5552. equal% 
  5553. [OPT Z
  5554. .histo%
  5555. LDR R0,[R9]:LDR R0,[R0] 
  5556. LDR R1,[R9,#8] 
  5557. LDR R2,[R9,#16]
  5558. .histlp
  5559. (LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5560. MOV R3,R3,LSR #bits-8
  5561.  col=2 
  5562. [OPT Z
  5563. ADD R3,R3,R3,LSL #1
  5564. !<LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5565. "(LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5566. MOV R3,R3,LSR #bits-8
  5567. $$ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
  5568. %<LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5569. &(LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5570. MOV R3,R3,LSR #bits-8
  5571. ($ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
  5572. [OPT Z
  5573. ,<LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5574. SUBS R0,R0,#1
  5575. BNE histlp
  5576. MOV PC,R14
  5577.  equal% 
  5578. [OPT Z
  5579. .histequal%
  5580. LDR R0,[R9]:LDR R0,[R0] 
  5581. LDR R1,[R9,#8] 
  5582. LDR R2,[R9,#16] 
  5583. .equallp
  5584. 9%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5585. MOV R3,R3,LSR #bits-8
  5586.  col=2 
  5587. [OPT Z
  5588. >%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5589. MOV R3,R3,LSR #bits-8
  5590. ADD R3,R3,R3,LSL #1
  5591. A(LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5592. B%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5593. MOV R3,R3,LSR #bits-8
  5594. D$ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
  5595. E(LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5596. F%LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5597. MOV R3,R3,LSR #bits-8
  5598. H$ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
  5599. [OPT Z
  5600. L(LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5601. SUBS R0,R0,#1
  5602. BNE equallp
  5603. MOV PC,R14
  5604.  "FN800","FN801","FN1000","FN1001"
  5605. [OPT Z
  5606. .rlexpand%
  5607. LDR R0,[R9] 
  5608. LDR R1,[R0] 
  5609. LDR R2,[R9,#8]:LDR R2,[R2] 
  5610. LDR R3,[R9,#16] 
  5611. LDR R4,[R3] 
  5612. CMP R4,#1:MOVLTS PC,R14
  5613. \ LDR R5,[R9,#24]:LDR R5,[R5] 
  5614. STRB R2,[R1],#1
  5615. SUB R4,R4,#1
  5616. CMP R1,R5
  5617. TEQNE R4,#0
  5618. BNE rle
  5619. .rlexit
  5620. STR R1,[R0] 
  5621. STR R4,[R3] 
  5622. MOV PC,R14
  5623.  "FN902"
  5624. [OPT Z
  5625. .unpack%
  5626. LDR R0,[R9] 
  5627. LDR R0,[R0] 
  5628. LDR R1,plbuff
  5629. ADD R2,R0,#768
  5630. .unpackloop
  5631. LDR R3,[R0],#4
  5632. MOV R5,#0
  5633. .bitloop
  5634. MOV R6,R3,LSR R5
  5635.  R6,R6,#15
  5636. ADD R5,R5,#4
  5637. MOV R7,R3,LSR R5
  5638.  R7,R7,#15
  5639. ADD R5,R5,#4
  5640. STRB R7,[R1],#1
  5641. STRB R6,[R1],#1
  5642. CMP R5,#32
  5643. BNE bitloop
  5644. CMP R2,R0
  5645. BNE unpackloop
  5646. MOV PC,R14
  5647. .plbuff EQUD plbuff%
  5648.  "FN1601","FN1501","FN1850","FN1851"
  5649. [OPT Z
  5650. .readiff%
  5651. MOV R1,#c%
  5652. LDR R8,[R9]:LDR R8,[R8] 
  5653. ,LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8 
  5654. MRS R0,CPSR
  5655. STMFD SP !,{R0,R14}
  5656.  r$="FN1850" 
  5657.  r$="FN1851" 
  5658. [OPT Z
  5659. BL bytefromcache%
  5660.  sy%>250 
  5661. [OPT Z
  5662. BL bytefromcache%
  5663. [OPT Z
  5664. BL bytefromcache%
  5665. CMP R0,#128
  5666. BCC rle1
  5667. RSB R2,R0,#256
  5668. BL bytefromcache%
  5669. .rle0 STRB R0,[R8],#1
  5670. SUBS R2,R2,#1
  5671. BPL rle0
  5672. B rle2
  5673.     .rle1
  5674. ADD R3,R0,#1
  5675. MOV R2,R8
  5676. ADD R8,R8,R3
  5677. BL multibytefromcache%
  5678.     .rle2
  5679. CMP R8,R7
  5680. BCC rle
  5681. LDMFD SP !,{R2,R14}
  5682. MSR CPSR_f,R2
  5683. MOV PC,R14
  5684.  "FN1900","FN1100","FN400"
  5685. [OPT Z
  5686. .readline%
  5687. LDR R2,[R9]:LDR R2,[R2] 
  5688. LDR R3,[R9,#8] 
  5689. LDR R0,[R3]
  5690. LDR R4,[R9,#16] 
  5691. MRS R5,CPSR
  5692. STMFD SP !,{R5,R14}
  5693. LDR R5,[R4]
  5694. -LDR R6,[R9,#24]:LDR R6,[R6]:ADD R6,R6,R2 
  5695. CMP R5,#1
  5696. BGE rle1
  5697. BL bytefromcache%
  5698. MOV R5,#1
  5699.  flag=1900 
  5700. [OPT Z
  5701. CMP R0,#192
  5702. CS R5,R0,#63:BLCS bytefromcache%
  5703.  flag=1100 
  5704. [OPT Z
  5705. CMP R0,#128
  5706. BNE rle1
  5707. BL bytefromcache%
  5708. TEQ R0,#0
  5709. Q R0,#128
  5710. BEQ rle1
  5711. ADD R5,R0,#1
  5712. BL bytefromcache%
  5713.  flag=400 
  5714. [OPT Z
  5715. MOV R1,R0 
  5716. BL bytefromcache% 
  5717. R R1,R1,R0,LSL #8
  5718. BL bytefromcache% 
  5719. R R1,R1,R0,LSL #16
  5720. BL bytefromcache%
  5721. ADD R5,R0,#1
  5722. MOV R0,R1
  5723.  flag=200 
  5724. [OPT Z
  5725. ADD R5,R0,#1
  5726. BL bytefromcache%
  5727. [OPT Z
  5728.     .rle1
  5729. STRB R0,[R2],#1
  5730.  flag=400 
  5731. [OPT Z
  5732. MOV R1,R0,LSR #8
  5733. STRB R1,[R2],#1
  5734. MOV R1,R0,LSR #16
  5735. STRB R1,[R2],#1
  5736. [OPT Z
  5737. SUB R5,R5,#1
  5738. TEQ R2,R6
  5739. BNE rle
  5740. .rlexit
  5741. STR R0,[R3]:STR R5,[R4]
  5742. LDMFD SP !,{R5,R14}
  5743. MSR CPSR_f,R5
  5744. MOV PC,R14
  5745.  "FN2401"
  5746. [OPT Z
  5747. .bm_rle8
  5748. MOV R1,#c%
  5749. LDR R8,[R9]:LDR R8,[R8]
  5750. MRS R7,CPSR
  5751. STMFD SP !,{R7,R14}
  5752. +LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5753. BL bytefromcache%  
  5754. TEQ r0,#0          
  5755. BEQ rlecopy
  5756. MOV r4,r0          
  5757. BL bytefromcache%  
  5758.     .rle1
  5759. STRB r0,[r8],#1
  5760. SUBS r4,r4,#1
  5761. BGT rle1
  5762.         B rle
  5763. .rlecopy
  5764. BL bytefromcache%  
  5765. CMP r0,#3          
  5766. BLT rlespecial
  5767. MOV r4,r0          
  5768.     .rle2
  5769. BL bytefromcache%
  5770. STRB r0,[r8],#1
  5771. BL bytefromcache%
  5772. SUBS r4,r4,#1
  5773. STRGTB r0,[r8],#1
  5774. SUBGTS r4,r4,#1
  5775. BGT rle2
  5776.     B rle
  5777. .rlespecial
  5778. LDMFD SP !,{R4,R14}
  5779. MSR CPSR_f,R4
  5780. MOV PC,R14
  5781.  "FN2402"
  5782. [OPT Z
  5783. .bm_rle4
  5784. MOV R1,#c%
  5785. LDR R8,[R9]:LDR R8,[R8]
  5786. MRS R7,CPSR
  5787. STMFD SP !,{R7,R14}
  5788. $+LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5789. MOV r2,#0          
  5790. MOV r3,#0          
  5791. BL bytefromcache%  
  5792. TEQ r0,#0          
  5793. BEQ rlecopy
  5794. MOV r4,r0          
  5795. BL bytefromcache%  
  5796. -    .rle1
  5797. BL bmrle4_insert
  5798. CMP r3,#8
  5799. MOVGE r5,r2,LSR#24
  5800. STRGEB r5,[r8],#1
  5801. MOVGE r2,r2,LSL#8
  5802. SUBGE r3,r3,#8
  5803. CMP r4,#0
  5804. BGT rle1
  5805. 6    B rle
  5806. .rlecopy
  5807. BL bytefromcache%  
  5808. CMP r0,#3          
  5809. BLT rlespecial
  5810. MOV r4,r0          
  5811. <    .rle2
  5812. BL bytefromcache%
  5813. BL bmrle4_insert
  5814. BL bytefromcache%
  5815. CMP r4,#0
  5816. BLGT bmrle4_insert
  5817. B rle4
  5818. C    .rle3
  5819. MOV r5,r2,LSR#24
  5820. STRB r5,[r8],#1
  5821. MOV r2,r2,LSL#8
  5822. SUB r3,r3,#8
  5823. H    .rle4
  5824. CMP r3,#8
  5825. BGE rle3
  5826. CMP r4,#0
  5827. BGT rle2
  5828. M    B rle
  5829. .rlespecial
  5830. CMP r3,#0
  5831. MOVGT r5,r2,LSR#24
  5832. STRGTB r5,[r8],#1
  5833. LDMFD SP !,{R5,R14}
  5834. MSR CPSR_f,R5
  5835. MOV PC,R14
  5836. .bmrle4_insert
  5837. RSB r5,r3,#32
  5838. MOV r2,r2,LSR r5
  5839. MOV r2,r2,LSL r5
  5840. SUB r5,r5,#8
  5841. R r2,r2,r0,LSL r5
  5842. SUBS r4,r4,#2
  5843. ADDMI r3,r3,#4
  5844. ADDPL r3,r3,#8
  5845. MOV PC,R14
  5846.  cachebytes% 
  5847. [OPT Z
  5848. .bytefromcache%
  5849. STMFD SP !,{R1,R2}
  5850. LDR R1,incacheptr
  5851. LDR R2,numlefttogo
  5852. LDRB R0,[R1],#1
  5853. SUBS R2,R2,#1
  5854. STRNE R1,incacheptr
  5855. STRNE R2,numlefttogo
  5856. LDMFD SP !,{R1,R2}
  5857. MOVNE PC,R14
  5858. STMFD SP !,{R0,R1,R2,R3,R4}
  5859. LDR R2,valdatacache
  5860. STR R2,incacheptr
  5861. LDR R3,valcache
  5862. STR R3,numlefttogo
  5863. MOV R0,#4
  5864. MOV R1,#c%
  5865. SWI "OS_GBPB"
  5866. LDMFD SP !,{R0,R1,R2,R3,R4}
  5867. v/CMP R14,#0 \Clear V incase of OS_GBPB error
  5868. MOV PC,R14
  5869. x .valdatacache DCD datacache%
  5870. .valcache DCD cache%
  5871. .incacheptr DCD datacache%
  5872. .numlefttogo DCD cache%
  5873. .multibytefromcache%
  5874. CMP R3,#0
  5875. Q PC,R14
  5876. STMFD SP !,{R0,R14}
  5877. .multibytefromcachel
  5878. BL bytefromcache%
  5879. STRB R0,[R2],#1
  5880. SUBS R3,R3,#1
  5881. BNE multibytefromcachel
  5882. LDMFD SP !,{R0,R14}
  5883. MOV PC,R14
  5884.  planar%<0 
  5885. C%=7:
  5886.  flag=2600 C%=15
  5887. [OPT Z
  5888. .plancnv% 
  5889. LDR R0,sxloc 
  5890. LDR R1,[R9]:LDR R1,[R1] 
  5891. LDR R3,[R9,#8]:LDR R3,[R3] 
  5892.  LDR R4,[R9,#16]:LDR R4,[R4] 
  5893.  flag=3500 
  5894. [OPT Z
  5895. MOV R9,#0
  5896. [OPT Z
  5897. MOV R9,#C%
  5898. [OPT Z
  5899. .planelp
  5900. MOV R7,#0
  5901. MOV R5,R3
  5902.  N%=1
  5903. planes%
  5904. [OPT Z
  5905. LDR R6,[R5],R4
  5906.  flag=2600 
  5907. [OPT Z
  5908. MOV R6,R6,LSL #8
  5909. BIC R6,R6,#&FF000000
  5910. R R6,R6,R6,LSR #16
  5911.  flag=3500 
  5912. [OPT Z
  5913. MOV R6,R6,LSR R9
  5914. S R6,R6,#1
  5915. R R7,R7,R6,LSL #(planes%-N%) 
  5916. RNE R7,R7,#(planes%-1)
  5917. [OPT Z
  5918. MOV R6,R6,LSR R9
  5919.  R6,R6,#1
  5920. R R7,R7,R6,LSL #(N%-1)
  5921. [OPT Z
  5922. STRB R7,[R1],#1
  5923.  flag=3500 
  5924. [OPT Z
  5925. ADD R9,R9,#1
  5926. CMP R9,#C%+1
  5927. Q R9,#0
  5928. [OPT Z
  5929. SUBS R9,R9,#1:MOVMI R9,#C%
  5930.  flag 
  5931.  2600
  5932. [OPT Z
  5933. MOVMI R3,R5
  5934.  3500
  5935. [OPT Z
  5936. ADDEQ R3,R3,#1
  5937. [OPT Z
  5938. ADDMI R3,R3,#1
  5939. [OPT Z
  5940. SUBS R0,R0,#1:BNE planelp
  5941. MOV PC,R14
  5942. cputime%=
  5943.  cache% 
  5944.  flag=3600 
  5945. Epcdblk%!12=cacherows%:
  5946. refillpcd:
  5947.  cache%>=filesize% rowstogo%=-1
  5948.  striprows%>0
  5949. compression>1 
  5950. 12,4,c%,datacache%,cache%
  5951.  cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
  5952. refill:
  5953.  cache%>=filesize% rowstogo%=-1
  5954. sizeshft%=0:
  5955.  ncol 
  5956.  2^24-1:size%=1
  5957.  2^15-1:size%=1
  5958.  63,255,256:size%=1
  5959.  15:size%=2:sizeshft%=1
  5960.  3:size%=4:sizeshft%=2
  5961.  1:size%=8:sizeshft%=3:
  5962.  m$="C" size%=2:sizeshft%=1
  5963.  m$="D" size%=4:sizeshft%=2
  5964.  m$="T" size%=2:sizeshft%=1
  5965.  flag 
  5966.  501:
  5967.  info% 
  5968. "Reading interlaced GIF"
  5969. %sz%=sx%*sy%:plbuff%=
  5970. dim(sz%+100)
  5971.  Y%=0
  5972. sy%-1
  5973. 8:X%=plbuff%+Y%*sx%:
  5974.  LZWdecode%,table%(0),c%,X%,sx%:
  5975.  Y%=4
  5976. sy%-1
  5977. 8:X%=plbuff%+Y%*sx%:
  5978.  LZWdecode%,table%(0),c%,X%,sx%:
  5979.  Y%=2
  5980. sy%-1
  5981. 4:X%=plbuff%+Y%*sx%:
  5982.  LZWdecode%,table%(0),c%,X%,sx%:
  5983.  Y%=1
  5984. sy%-1
  5985. 2:X%=plbuff%+Y%*sx%:
  5986.  LZWdecode%,table%(0),c%,X%,sx%:
  5987. ?datacache%=plbuff%:buff%=plbuff%:rowbytes%=sx%:rowstogo%=-1
  5988.  gamma<>1 
  5989.  gamma<>0 
  5990.  k=1/gamma:
  5991.  C%=0
  5992. colourindex
  5993.  r%(C%) r%(C%)=((r%(C%)/F)^k)*F
  5994.  g%(C%) g%(C%)=((g%(C%)/F)^k)*F
  5995.  b%(C%) b%(C%)=((b%(C%)/F)^k)*F
  5996. rmax=F:gmax=F:bmax=F
  5997.  col=0 
  5998.  input<9 
  5999.  C%=0
  6000. 255:r%(C%)=r%(C%)*rwt+g%(C%)*gwt+b%(C%)*bwt:
  6001.  input<400 
  6002.     $rmax=F*rwt:gmax=F*gwt:bmax=F*bwt
  6003.  C%=0
  6004. colourindex:r%(C%)=r%(C%)*rwt:g%(C%)=g%(C%)*gwt:b%(C%)=b%(C%)*bwt:
  6005. order% 
  6006. adjustpalette(1/ydiv%/xdiv%,0)
  6007.  range% 
  6008.  info% 
  6009. "Scanning data to compute parameters for '-range'"
  6010.  order% 
  6011. Y%=0:
  6012.  hour%,Y%*100
  6013. (r$+"(xp%())"):
  6014.  maxmin%,xp%(1,0),totvals2%:Y%+=1
  6015.  Y%=sy% 
  6016. !min<255 
  6017. !max+255>=F
  6018. 'Y%=0:ysamp%=1:
  6019.  hour%,Y%*100
  6020. scaledpixelrow(cl%()):
  6021.  maxmin%,cl%(1,0),totvals%:Y%+=1
  6022.  Y%=y% 
  6023.  !min<255 
  6024.  !max+255>=F
  6025. !max+255>=F 
  6026. !min<255 range%=
  6027. :range$="No point in '-range' on this image"
  6028.  range% 
  6029. adjustpalette(F/(!max-!min),!min/ydiv%/xdiv%):range$="Input image maximum "+
  6030. (!max/F*100)+"% minimum "+
  6031. (!min/F*100)+"%"
  6032. rewind:
  6033.  info% 
  6034.  range$
  6035.  hist% 
  6036. equal% 
  6037.  equal% 
  6038.  info% 
  6039. "Scanning data to compute parameters for '-equal'"
  6040.  order% 
  6041.  yr%=0
  6042. sy%-1:
  6043.  hour%,yr%*100
  6044. "7W%=
  6045. (r$+"(xp%())"):
  6046.  histo%,xp%(1,0),vals%(0,0),sx%
  6047. %.ysamp%=1:
  6048.  yr%=0
  6049. y%-1:
  6050.  hour%,yr%*100
  6051. scaledpixelrow(cl%()):
  6052.  histo%,cl%(1,0),vals%(0,0),x%
  6053.  info% 
  6054. "Done. Now processing the picture"
  6055.  input<400 
  6056.  C%=0
  6057. colourindex
  6058.  r%(C%)<0 r%(C%)=0
  6059.  g%(C%)<0 g%(C%)=0
  6060.  b%(C%)<0 b%(C%)=0
  6061.  r%(C%)>rmax r%(C%)=rmax
  6062.  g%(C%)>gmax g%(C%)=gmax
  6063.  b%(C%)>bmax b%(C%)=bmax
  6064.  hist% 
  6065. M%=0:ZM%=-1:
  6066.  C%=0
  6067.  Z%=0
  6068.  vals%(Z%,C%)>M% M%=vals%(Z%,C%):ZM%=Z%
  6069.  ZM%=-1 
  6070.  okinfo%=0 
  6071.  col>0 
  6072. 66:ht=500
  6073. <>66 
  6074. 16:ht=400
  6075. 0,6,2000,6
  6076. 18:ht=400:
  6077. 0,6,1024,6
  6078. A$M=M%/(ht*2-8):
  6079.  C%=0
  6080.  col>0 
  6081.  Z%=0
  6082.  vals%(Z%,C%) X%=Z%*3+C%<<1:
  6083.  X%,8,X%,vals%(Z%,C%)/M+8
  6084.  Z%=0
  6085.  vals%(Z%,C%) X%=Z%<<2:
  6086.  X%,8,2,vals%(Z%,C%)/M
  6087. close:
  6088. "Hourglass_Off"
  6089.  m>=0 oname$="p"+
  6090.  m+m$ 
  6091.  oname$=m$
  6092.  m=-6 
  6093. m=-7 
  6094. m=-8 oname$=pnm$
  6095.  range% oname$+="r"
  6096.  equal% oname$+="e"
  6097.  sharpen% oname$+="s"+
  6098.  sharpen%
  6099.  black% oname$+="b"+
  6100.  black%
  6101.  gamma<>1 A%=@%:@%=&1020100:oname$+="g"+
  6102.  gamma:@%=A%
  6103.  bright%=16 oname$+="b"
  6104. Y*xsp%=x%:ysp%=y%:
  6105.  rotate% 
  6106.  xsp%,ysp%
  6107.  rotate% 
  6108.  hflip% 
  6109.  vflip% 
  6110.  m=-9 
  6111.  m=-10 
  6112.  m-=2
  6113.  m=-9
  6114. m=-10 
  6115.  jpq%(20)
  6116. ][jpq%()=60,75,90,105,120,135,150,160,170,180,190,205,215,235,255,280,320,380,500,750,850
  6117.  -1:xwords%=xsp%:sz%=xwords%*ysp%:Y%=ysp%
  6118. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6119.  -3,-5:xwords%=xsp%*2:sz%=xwords%*ysp%:Y%=ysp%
  6120. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6121.  -4:xwords%=xsp%*3:sz%=xwords%*ysp%:Y%=ysp%
  6122. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6123.  -6:xwords%=xsp%*2+3
  6124. 3:sz%=xwords%*ysp%:Y%=ysp%
  6125. g'A%=Y%:
  6126. getoutput(sz%,64,xwords%,Y%)
  6127. h1ram%!4=0:ram%!8=16:ram%!12=16:
  6128. &2e,&109,ram%
  6129. &2e,&10f,ram%,oname$,0,xsp%*2,Y%,28
  6130. jJbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6131. k)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6132. l>base%!(10*4)=5<<27 
  6133.  nx<<1 
  6134.  ny<<14 
  6135.  1:base%+=base%!(8*4)
  6136.  -8:xwords%=xsp%*4:sz%=xwords%*ysp%:Y%=ysp%
  6137. o'A%=Y%:
  6138. getoutput(sz%,64,xwords%,Y%)
  6139. p1ram%!4=0:ram%!8=16:ram%!12=16:
  6140. &2e,&109,ram%
  6141. &2e,&10f,ram%,oname$,0,xsp%*4,Y%,28
  6142. rJbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6143. s)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6144. t>base%!(10*4)=6<<27 
  6145.  nx<<1 
  6146.  ny<<14 
  6147.  1:base%+=base%!(8*4)
  6148.  -9:xwords%=xsp%+3
  6149. 3:sz%=(xsp%+7
  6150. 7)*(ysp%+7
  6151. 7):Y%=ysp%
  6152. v)sz%=sz%*jpq%(jpegquality%
  6153. 5)/588+1024
  6154. w&jpegwrk%=
  6155. dim((xsp%+7
  6156. 7)*9+20000)
  6157. base%=
  6158. dim(xwords%)
  6159. getoutputjp(sz%)
  6160. zN!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
  6161. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
  6162. 7)*9+20000 
  6163.  jpegtag%
  6164.  -10:xwords%=xsp%*3+3
  6165. 3:sz%=(xsp%+15
  6166. 15)*(ysp%+15
  6167. 15)*12/8:Y%=ysp%
  6168. })sz%=sz%*jpq%(jpegquality%
  6169. 5)/588+1024
  6170. ~)jpegwrk%=
  6171. dim((xsp%+15
  6172. 15)*30+20000)
  6173. base%=
  6174. dim(xwords%)
  6175. getoutputjp(sz%)
  6176. N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
  6177. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
  6178. 15)*30+20000 
  6179.  jpegtag%
  6180.  -11:xwords%=xsp%:sz%=xwords%*ysp%+20000:Y%=ysp%
  6181. &jpegwrk%=
  6182. dim((xsp%+7
  6183. 7)*9+20000)
  6184. getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
  6185.  -12:xwords%=xsp%*3:sz%=xwords%*ysp%+20000:Y%=ysp%
  6186. )jpegwrk%=
  6187. dim((xsp%+15
  6188. 15)*30+20000)
  6189. getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
  6190. :xwords%=xsp%/size%+3.9999
  6191. 3:sz%=xwords%*ysp%:X%=xsp%:Y%=ysp%
  6192.  ncol=1 
  6193. "C":!rowinc=xwords%:xwords%=xwords%*4:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*4
  6194. "T":!rowinc=xwords%:xwords%=xwords%*3:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*3
  6195. "D":!rowinc=xwords%:xwords%=xwords%*2:sz%=xwords%*ysp%:X%=xsp%*2:Y%=ysp%*2
  6196. ,A%=Y%:
  6197. getoutput(sz%,2048+64,xwords%,Y%)
  6198. 1ram%!4=0:ram%!8=16:ram%!12=16:
  6199. &2e,&109,ram%
  6200. &2e,&10f,ram%,oname$,(ncol<63)
  6201. 1,X%,Y%,spm
  6202. Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6203. )ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6204. &pal%=base%+11*4:base%+=base%!(8*4)
  6205.  ncol 
  6206. R!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
  6207.  Z%=0
  6208. 255:B%=Z%
  6209. Z%<<8
  6210. Z%<<16:B%=B%<<8
  6211. %pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
  6212. R!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
  6213.  Z%=0
  6214. 255:B%=palette%!(Z%<<2)<<8
  6215. %pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
  6216.  Z%=0
  6217. col(Z%,palette%!(Z%<<2)
  6218. &F0F0F0):
  6219.  Z%=0
  6220. 7:A%=0:
  6221. 1 A%+=&F0
  6222. 2 A%+=&F000
  6223. 4 A%+=&F00000
  6224. col(Z%,A%):
  6225.  Z%=0
  6226. 15:A%=Z%<<4:
  6227. col(Z%,A%
  6228. A%<<8
  6229. A%<<16):
  6230.  Z%=0
  6231. 15:A%=(Z%
  6232. 7)/7*15+.2<<4:
  6233. col(Z%,A%
  6234. A%<<8
  6235. A%<<16):
  6236. col(0,0):
  6237. col(1,&F0F000):
  6238. col(2,&F000F0):
  6239. col(3,&F0F0)
  6240.  Z%=0
  6241. col(Z%,palette%!(Z%<<2)
  6242. &F0F0F0):
  6243.  Z%=0
  6244. 3:A%=Z%*5<<4:
  6245. col(Z%,A%
  6246. A%<<8
  6247. A%<<16):
  6248. col(0,0):
  6249. col(1,&F0F0F0)
  6250.  flex% 
  6251.  workspace%<0 
  6252. :[OPT 0:STR r13,P%+16:MOV Pc,r14:]:
  6253. +32*1024+
  6254.  base%*size%>2^32 
  6255.  42,"base%*size% product too large"
  6256. Save:
  6257. $+" (internal number "+
  6258. $ysamp%=1:nl%()=0:step%=4*(col+1)
  6259. Iaddr%=base%<<sizeshft%:rowstep%=xwords%*size%:colstep%=1:dist%=xsp%-1
  6260.  m=-3
  6261. m=-6 dist%=dist%*2
  6262.  m=-4
  6263. m=-10
  6264. m=-12 dist%=dist%*3
  6265.  m=-8 dist%=dist%*4
  6266.  rotate% 
  6267. 6odist%=dist%:
  6268.  colstep%,rowstep%:
  6269.  hflip%,vflip%
  6270.  rotate%=1 
  6271. Gaddr%+=(ysp%-1)*colstep%:colstep%=-colstep%:dist%=(ysp%-1)*colstep%
  6272. ;addr%+=dist%:rowstep%=-rowstep%:dist%=(ysp%-1)*colstep%
  6273.  m=-3
  6274. m=-6 colstep%=colstep%/2:rowstep%=rowstep%*2
  6275.  m=-4
  6276. m=-10
  6277. m=-12 colstep%=colstep%/3:rowstep%=rowstep%*3
  6278.  m=-8 colstep%=colstep%/4:rowstep%=rowstep%*4
  6279.  hflip% 
  6280. 0addr%+=dist%:dist%=-dist%:colstep%=-colstep%
  6281.  vflip% 
  6282.  rotate% 
  6283. ,addr%+=odist%*rotate%:rowstep%=-rowstep%
  6284. /addr%+=(ysp%-1)*rowstep%:rowstep%=-rowstep%
  6285. Soutlim%=((base%+xwords%*Y%)<<sizeshft%)-1:oddcolstep%=-colstep%:oddstep%=-step%
  6286.  order% 
  6287. adjustpalette(1/ydiv%/xdiv%,0)
  6288.  m=-9
  6289. m=-10 
  6290.  "OS_SWINumberFromString",,"CompressJPEG_WriteLine" 
  6291.  sy%=y% 
  6292.  sx%=x% 
  6293.  range%=
  6294.  sharpen%=
  6295.  equal%=
  6296.  dither% 
  6297.  yr%=0 
  6298.  y%-1:
  6299.  hour%,yr%*100
  6300. (r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%
  6301.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6302. GA%=addr%+dist%:
  6303.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6304.  wl%,jpegtag%,addr%
  6305. KI%=step%:
  6306.  yr%=0
  6307. y%-1:
  6308.  hour%,yr%*100
  6309.  addr%>outlim% 
  6310. flushoutput
  6311. (r$+"(cl%())"):B%=x%:
  6312.  fs%,colstep%,cl%(1,0),I%,addr%,I%,B%
  6313.  wl%,jpegtag%,addr%
  6314.  equal% 
  6315. rewind:Havg%=
  6316. (vals%())/256/(col+1):
  6317.  new%(256,col)
  6318.  B%=0
  6319. col:R%=0:Hint%=0:
  6320.  Z%=0
  6321. 256:L%=R%:Hint%+=vals%(Z%,B%)
  6322.  Hint%>Havg%:Hint%-=Havg%:R%+=1:
  6323. new%(Z%,B%)=(L%+R%)/2*F/256
  6324.  sharpen% 
  6325.  order% 
  6326. ;yread%=sy%-1:W%=
  6327. (r$+"(rm1%())"):
  6328.  equal% 
  6329. fit2(rm1%())
  6330.  B%=0
  6331. col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
  6332. =yread%=y%-1:
  6333. scaledpixelrow(rm1%()):
  6334.  equal% 
  6335. fit(rm1%())
  6336.  B%=0
  6337. col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
  6338. rm2%()=rm1%()
  6339.  order% 
  6340.  yr%=0 
  6341.  y%-1
  6342.  hour%,yr%*100
  6343.  addr%>outlim% 
  6344. flushoutput
  6345.  sy%=y% 
  6346. sharppixelrow(cl%())
  6347. ;ysamp%-=1:
  6348.  ysamp%=0 
  6349. sharppixelrow(xl%()):ysamp%=ymul%
  6350.  ydiv%=1 
  6351. cl%()=xl%()
  6352.  ysamp%>=ydiv% 
  6353. #ysamp%-=ydiv%:cl%()=xl%()*ydiv%
  6354. /cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6355.  ysamp%=0 
  6356. sharppixelrow(xl%()):ysamp%=ymul%
  6357.  ysamp%>Y% 
  6358. 6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
  6359. >Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
  6360.  Y%=0
  6361. ysamp%+=1
  6362.  2cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
  6363.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6364.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6365.  wl%,jpegtag%,addr%
  6366.  yr%=0 
  6367.  y%-1
  6368.  hour%,yr%*100
  6369.  addr%>outlim% 
  6370. flushoutput
  6371.  sharpen% 
  6372.  yread% yread%-=1:
  6373. scaledpixelrow(rm%()):
  6374.  equal% 
  6375. fit(rm%())
  6376.  B%=0
  6377. col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
  6378.  sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
  6379.  rm2%(),rm1%():rm1%()=rm%()
  6380. scaledpixelrow(cl%()):
  6381.  equal% 
  6382. fit(cl%())
  6383. 32cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
  6384.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6385.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6386.  wl%,jpegtag%,addr%
  6387. "CompressJPEG_Finish",jpegtag% 
  6388.  jpegsize%
  6389.  sy%=y% 
  6390.  sx%=x% 
  6391.  range%=
  6392.  sharpen%=
  6393.  equal%=
  6394.  dither% 
  6395.  yr%=0 
  6396.  y%-1:
  6397.  hour%,yr%*100
  6398.  addr%>outlim% 
  6399. flushoutput
  6400. BOW%=
  6401. (r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6402.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6403. FBA%+=dist%:
  6404.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6405. JKI%=step%:
  6406.  yr%=0
  6407. y%-1:
  6408.  hour%,yr%*100
  6409.  addr%>outlim% 
  6410. flushoutput
  6411. KYW%=
  6412. (r$+"(cl%())"):B%=x%:A%=addr%:addr%+=rowstep%:
  6413.  fs%,colstep%,cl%(1,0),I%,A%,I%,B%
  6414.  equal% 
  6415. rewind:Havg%=
  6416. (vals%())/256/(col+1):
  6417.  new%(256,col)
  6418.  B%=0
  6419. col:R%=0:Hint%=0:
  6420.  Z%=0
  6421. 256:L%=R%:Hint%+=vals%(Z%,B%)
  6422.  Hint%>Havg%:Hint%-=Havg%:R%+=1:
  6423. new%(Z%,B%)=(L%+R%)/2*F/256
  6424.  sharpen% 
  6425.  order% 
  6426. X;yread%=sy%-1:W%=
  6427. (r$+"(rm1%())"):
  6428.  equal% 
  6429. fit2(rm1%())
  6430.  B%=0
  6431. col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
  6432. [=yread%=y%-1:
  6433. scaledpixelrow(rm1%()):
  6434.  equal% 
  6435. fit(rm1%())
  6436.  B%=0
  6437. col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
  6438. rm2%()=rm1%()
  6439.  order% 
  6440.  yr%=0 
  6441.  y%-1
  6442.  hour%,yr%*100
  6443.  addr%>outlim% 
  6444. flushoutput
  6445.  sy%=y% 
  6446. sharppixelrow(cl%())
  6447. f;ysamp%-=1:
  6448.  ysamp%=0 
  6449. sharppixelrow(xl%()):ysamp%=ymul%
  6450.  ydiv%=1 
  6451. cl%()=xl%()
  6452.  ysamp%>=ydiv% 
  6453. k#ysamp%-=ydiv%:cl%()=xl%()*ydiv%
  6454. m/cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6455.  ysamp%=0 
  6456. sharppixelrow(xl%()):ysamp%=ymul%
  6457.  ysamp%>Y% 
  6458. q6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
  6459. s>Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
  6460.  Y%=0
  6461. ysamp%+=1
  6462. z<cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6463.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6464. ~BA%+=dist%:
  6465.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6466.  yr%=0 
  6467.  y%-1
  6468.  hour%,yr%*100
  6469.  addr%>outlim% 
  6470. flushoutput
  6471.  sharpen% 
  6472.  yread% yread%-=1:
  6473. scaledpixelrow(rm%()):
  6474.  equal% 
  6475. fit(rm%())
  6476.  B%=0
  6477. col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
  6478.  sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
  6479.  rm2%(),rm1%():rm1%()=rm%()
  6480. scaledpixelrow(cl%()):
  6481.  equal% 
  6482. fit(cl%())
  6483. <cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6484.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6485. BA%+=dist%:
  6486.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6487.  m=-11
  6488. m=-12 
  6489.  "OS_SWINumberFromString",,"CompressJPEG_WriteLine" 
  6490.  m=-11 
  6491. N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
  6492. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
  6493. 7)*9+20000 
  6494.  jpegtag%
  6495. N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
  6496. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
  6497. 15)*30+20000 
  6498.  jpegtag%
  6499. addr%=ram%+20000
  6500.  yr%=0
  6501. ysp%-1
  6502.  hour%,yr%*100
  6503.  ysp%:
  6504.  wl%,jpegtag%,addr%:addr%+=xwords%
  6505. "CompressJPEG_Finish",jpegtag% 
  6506.  jpegsize%
  6507. cputime%=
  6508. -cputime%
  6509. srchdevlist
  6510. [OPT Z
  6511. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  6512. ?MOV R0,R4,LSR #(bits-k%):CMP R0,#1<<k%:MOVCS R0,#(1<<k%)-1 
  6513. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  6514. SMOV R3,R5,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
  6515. R R0,R0,R3,LSL #k% 
  6516. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  6517. UMOV R3,R6,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
  6518. R R0,R0,R3,LSL #k%*2 
  6519. STMFD SP !,{R8,R9,R10,R11}
  6520. LDR r3,ictloc
  6521. LDR r2,[r3,r0,LSL #2]
  6522. MOV r14,r2,lsr #24 
  6523. CMP r14,#4
  6524. ADDCC r2,r3,r0,lsl #2 
  6525. BICCS r2,r2,#&ff000000 
  6526. LDRB r0,[r2],#1 
  6527. SUBS r14,r14,#1
  6528. BEQ gotit
  6529. ADD r3,r0,r0,lsl #1
  6530. ADD r3,r7,r3,lsl #2
  6531. LDMIA r3,{r8,r9,r10}
  6532. SUBS r8,r8,r4
  6533. RSBMI r8,r8,#0
  6534. MOV r8,r8,lsr #bits/2 
  6535. SUBS r9,r9,r5
  6536. RSBMI r9,r9,#0
  6537. MOV r9,r9,lsr #bits/2 
  6538. SUBS r10,r10,r6
  6539. RSBMI r10,r10,#0
  6540. MOV r10,r10,lsr #bits/2 
  6541. MUL r3,r8,r8
  6542. MUL r11,r9,r9
  6543. ADD r11,r11,r11,LSL #2
  6544. ADD r3,r3,r3,LSL #1
  6545. ADD r3,r3,r11,LSL #1
  6546. MLA r11,r10,r10,r3 
  6547. .srchlist
  6548. LDRB r3,[r2],#1
  6549. ADD R8,R3,R3,LSL #1
  6550. ADD R8,R7,R8,LSL #2
  6551. LDMIA R8,{R8,R9,R10}
  6552. SUBS R9,R5,R9
  6553. RSBMI R9,R9,#0
  6554. MOV R3,R9,LSR #bits/2
  6555. MUL R9,R3,R3
  6556. ADD r9,r9,r9,LSL #2
  6557. CMP R11,R9,LSL #1
  6558. BCC srchquick
  6559. SUBS R8,R4,R8
  6560. RSBMI R8,R8,#0
  6561. MOV R3,R8,LSR #bits/2
  6562. MUL R8,r3,r3
  6563. ADD r8,r8,r8,LSL #1
  6564. ADD r8,r8,r9,LSL #1
  6565. SUBS R10,R6,R10
  6566. RSBMI R10,R10,#0
  6567. MOV R3,R10,LSR #bits/2
  6568. MLA R10,R3,R3,R8
  6569. CMP R10,R11
  6570. MOVCC R11,R10
  6571. LDRCCB R0,[r2,#-1]
  6572. .srchquick
  6573. SUBS R14,R14,#1
  6574. BNE srchlist
  6575. .gotit
  6576. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  6577. LDMIA R3,{R8,R9,R10}
  6578. +SUB R4,R4,R8:SUB R5,R5,R9:SUB R6,R6,R10
  6579. LDMFD r13!,{R8,R9,R10,R11}
  6580. getoutput(A%,E%,B%,
  6581.  A%>max% 
  6582.  rotate%=
  6583.  vflip%=
  6584. 3C%=max%
  6585.  B%+1:A%=xwords%*C%+E%:first%=
  6586. A%+=E%
  6587.  spritearea%<0 
  6588. 0ram%=
  6589. createarea(A%):
  6590.  ram%=-1 ram%=
  6591. dim(A%)
  6592. ram%=spritearea%
  6593. !ram%=A%
  6594. getoutputjp(
  6595.  spritearea%<0 
  6596. 4ram%=
  6597. createareajp(A%):
  6598.  ram%=-1 ram%=
  6599. dimjp(A%)
  6600. ram%=spritearea%
  6601. !ram%=A%
  6602. createarea(size%)
  6603. areanumber%=0
  6604.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI sprite" 
  6605.  ,areanumber%,,areabase%;V%
  6606.  areanumber%=0:=-1
  6607.  "OS_ReadDynamicArea",areanumber% 
  6608.  ,areasize%
  6609.  areasize%<size% 
  6610. removearea:
  6611.  42,"Couldn't create area"
  6612. =areabase%
  6613. createareajp(
  6614.  size%)
  6615. areanumber%=0
  6616.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI JPEG" 
  6617.  ,areanumber%,,areabase%;V%
  6618.  areanumber%=0:=-1
  6619.  "OS_ReadDynamicArea",areanumber% 
  6620.  ,areasize%:size%=areasize%
  6621. =areabase%
  6622. removearea
  6623.  areanumber% 
  6624.  "OS_DynamicArea",1,areanumber%:areanumber%=0
  6625. cachedim(size%)
  6626. cacheareanumber%=0
  6627.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI cache" 
  6628.  ,cacheareanumber%,,cacheareabase%;V%
  6629.  cacheareanumber%=0:=-1
  6630.  "OS_ReadDynamicArea",cacheareanumber% 
  6631.  ,cacheareasize%
  6632.  cacheareasize%<size% 
  6633. removecachearea:
  6634.  42,"Couldn't create area"
  6635. =cacheareabase%
  6636. removecachearea
  6637.  cacheareanumber% 
  6638.  "OS_DynamicArea",1,cacheareanumber%:cacheareanumber%=0
  6639. flushoutput
  6640.  spritearea%<0 
  6641. oksave% 
  6642. &(A%=base%:
  6643.  first% A%=ram%+4:first%=
  6644. 12,2,o%,A%,addr%
  6645.  size%-A%
  6646. addr%=base%*size%
  6647. close
  6648.  flag=3600 
  6649. "PhotoCD_Close",pcdh%,1
  6650. #c%:c%=0:
  6651.  scrapf% scrapf%=
  6652. "Remove <Wimp$Scrap>"
  6653.  cc% 
  6654. #cc%:cc%=0
  6655.  ccc% 
  6656. #ccc%:ccc%=0
  6657. removecachearea
  6658. close
  6659.  spritearea%<0 
  6660. oksave% 
  6661. flushoutput 
  6662. "OS_File",10,f$,&004,,ram%,ram%+sz%
  6663.  -2:o%=
  6664. #o%,pnm$
  6665.  pnm$ 
  6666.  "P1"
  6667. #o%,"# "+f$+".pbm (options "+oname$+")"
  6668.  xsp%+" "+
  6669.  ysp%
  6670.  Y%=0
  6671. ysp%-1:B%=base%+Y%*xwords%
  6672.  X%=0
  6673. xsp%-1:
  6674.  B%?(X%>>3)
  6675. (1<<(X%
  6676. #o%,"1"; 
  6677. #o%,"0";
  6678. #o%,""
  6679.  "P4"
  6680. #o%,"# "+f$+".pbm (options "+oname$+") binary encoded"
  6681.  xsp%+" "+
  6682.  ysp%
  6683.  X%=0
  6684. 255:code%?X%=X%<<7 
  6685.  X%<<5
  6686.  X%<<3
  6687.  X%<<1
  6688.  X%>>1
  6689.  X%>>3
  6690. X%>>5
  6691. X%>>7:
  6692.  Y%=0
  6693. ysp%-1:B%=base%+Y%*xwords%
  6694.  X%=0
  6695. xsp%-1
  6696. #o%,code%?(B%?(X%>>3)):
  6697.  "P2"
  6698. #o%,"# "+f$+".pgm (options "+oname$+")"
  6699.  xsp%+" "+
  6700.  ysp%
  6701. #o%,"15"
  6702.  Y%=0
  6703. ysp%-1:B%=base%+Y%*xwords%
  6704.  X%=0
  6705. xsp%-1:C%=B%?(X%>>1):
  6706. 1 C%=C%>>4 
  6707.  C%=C%
  6708. #o%," "+
  6709. #o%,""
  6710.  "P5"
  6711. #o%,"# "+f$+".pgm (options "+oname$+") binary encoded"
  6712.  xsp%+" "+
  6713.  ysp%
  6714. #o%,"15"
  6715.  Y%=0
  6716. ysp%-1:B%=base%+Y%*xwords%
  6717.  X%=0
  6718. xsp%-1:C%=B%?(X%>>1):
  6719. 1 C%=C%>>4 
  6720.  C%=C%
  6721. #o%,C%
  6722. #o%:o%=0
  6723.  pnm$="P2"
  6724. pnm$="P1" 
  6725. "Settype "+f$+" &FFF"
  6726.  -3:o%=
  6727. #o%,pnm$
  6728. #o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits r,g,b)"
  6729.  xsp%+" "+
  6730.  ysp%
  6731. #o%,"31"
  6732. 12,2,o%,ram%,xsp%*ysp%*2
  6733. #o%:o%=0
  6734.  -4:o%=
  6735.  pnm$="IRLAM"
  6736. #o%,"Irlam 24: "+
  6737.  xsp%+" "+
  6738.  ysp%
  6739.  Y%=0
  6740. ysp%-1:B%=ram%+Y%*xwords%
  6741.  X%=0
  6742. xsp%*3-1
  6743. #o%,B%?X%:
  6744. i(B%+=1:
  6745.  X%=0
  6746. xsp%*3-1
  6747. #o%,B%?X%:
  6748. j(B%+=1:
  6749.  X%=0
  6750. xsp%*3-1
  6751. #o%,B%?X%:
  6752. #o%,pnm$
  6753.  pnm$="P6" 
  6754. #o%,"# "+f$+".ppm (options "+oname$+") binary encoded 24bpp r,g,b"
  6755. #o%,"# "+f$+".ppm (options "+oname$+") "+
  6756. (p6bits*3)+"bpp r,g,b"
  6757.  xsp%+" "+
  6758.  ysp%
  6759. (2^p6bits-1)
  6760.  pnm$="P6" 
  6761. 12,2,o%,ram%,xsp%*ysp%*3
  6762.  Y%=0
  6763. ysp%-1:B%=ram%+Y%*xwords%
  6764.  X%=0
  6765. xsp%-1:C%=B%!(X%*3):
  6766. #o%," "+
  6767. 255)+" "+
  6768. ((C%>>8)
  6769. &FF)+" "+
  6770. ((C%>>16)
  6771. 255);
  6772. #o%,""
  6773. #o%:o%=0
  6774.  pnm$="P3" 
  6775. "Settype "+f$+" &FFF"
  6776.  -5:o%=
  6777. #o%,pnm$
  6778. #o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits y,u,v)"
  6779.  xsp%+" "+
  6780.  ysp%
  6781. #o%,"31 27 21"
  6782. 12,2,o%,ram%,xsp%*ysp%*2
  6783. #o%:o%=0
  6784.  -9,-10,-11,-12
  6785.  spritearea%<0 
  6786. oksave% 
  6787. 8,10,f$,&c85,,ram%,ram%+jpegsize%
  6788.  ncol=1
  6789. m$="T" 
  6790.  X%=(xsp%*4-1)
  6791. 8*8+6
  6792. &2e,&12e,ram%,oname$,X%
  6793. &2e,&12e,ram%,oname$,X%
  6794.  spritearea%<0 
  6795. oksave% 
  6796. flushoutput 
  6797. &2e,&10c,ram%,f$
  6798. #o%:o%=0:
  6799. "settype "+f$+" &ff9":
  6800. removearea
  6801. "Hourglass_Off"
  6802. defpal
  6803.  C%=0
  6804. #r%(C%)=(C%
  6805. 16)>>1)/15*F
  6806. $g%(C%)=(C%
  6807. &60)>>3)/15*F
  6808. 0b%(C%)=(C%
  6809. 8)>>1 
  6810. 128)>>4)/15*F
  6811. defpal2
  6812. r%(0)=F:g%(0)=F:b%(0)=F
  6813. defpal4
  6814. 0r%()=15,10,5,0:
  6815.  C%=0
  6816. 3:r%(C%)=r%(C%)/15*F:
  6817. g%()=r%():b%()=r%()
  6818. defpal16
  6819. 1r%()=15,13,11,9,7,5,3,0,0,14, 0,13,14,5,15, 0
  6820. 1g%()=15,13,11,9,7,5,3,0,4,14,12, 0,14,8,11,10
  6821. 1b%()=15,13,11,9,7,5,3,0,9, 0, 0, 0,11,0, 0,15
  6822.  C%=0
  6823. 15:r%(C%)=r%(C%)/15*F:g%(C%)=g%(C%)/15*F:b%(C%)=b%(C%)/15*F:
  6824. ipal63
  6825. #c%=&38:
  6826.  rpal%(15),gpal%(15),bpal%(15)
  6827.  C%=0
  6828. 15:D%=
  6829. rpal%(C%)=
  6830. #c%>>4 
  6831. gpal%(C%)=
  6832. #c%>>4 
  6833. bpal%(C%)=
  6834. #c%>>4 
  6835.  C%=0
  6836. )r%(C%)=(rpal%(C%
  6837. 16)>>1)/15*F
  6838. *g%(C%)=(gpal%(C%
  6839. &60)>>3)/15*F
  6840. *b%(C%)=(bpal%(C%
  6841. 128)>>4)/15*F
  6842. ipal(D%)
  6843. #c%=&38
  6844.  C%=0
  6845. D%-1:D%=
  6846. r%(C%)=(
  6847. #c%>>4)/15*F
  6848. g%(C%)=(
  6849. #c%>>4)/15*F
  6850. b%(C%)=(
  6851. #c%>>4)/15*F
  6852. newropal(D%)
  6853. #c%=&38
  6854.  C%=0
  6855. D%-1:D%=
  6856. r%(C%)=(D%
  6857. 255)/255*F
  6858. g%(C%)=(D%>>8
  6859. 255)/255*F
  6860. b%(C%)=(D%>>16
  6861. 255)/255*F
  6862. nopal
  6863.  C%=0
  6864. 255:r%(C%)=C%/255*F:
  6865. :g%()=r%():b%()=r%()
  6866. col(A%,B%)
  6867. 6B%=B%<<8
  6868. B%<<4
  6869. &10:pal%!(A%*8)=B%:pal%!(A%*8+4)=B%
  6870. bits(A%)
  6871.  A%=1 
  6872. ="1 bit per pixel" 
  6873.  A%+" bits per pixel"
  6874.  Z%,s$
  6875.  Z%=1
  6876. 80:s$+=
  6877. uc(a$)
  6878.  Z%,z$,b$
  6879.  Z%=1
  6880. a$,Z%,1)
  6881.  z$>="a"
  6882.  z$<="z" z$=
  6883.  z$-32)
  6884. b$+=z$:
  6885. dim(A%)
  6886.  flex% 
  6887. 1B%=nextlocation%:A%=A%+3
  6888. 3:nextlocation%+=A%
  6889. "Wimp_SlotSize",-1,-1 
  6890.  currentslot%
  6891.  currentslot%+&8000<nextlocation% 
  6892.  "Wimp_SlotSize",nextlocation%-&8000,-1 
  6893.  currentslot%
  6894.  currentslot%+&8000<nextlocation% 
  6895.  42,"Can't get enough memory to process image"
  6896.  workspace%<0 
  6897.  B% A%
  6898. XB%=workspace%:workspace%+=A%+3
  6899.  workspace%>worklimit% 
  6900. 42,"Not enough workspace"
  6901. dimjp(
  6902.  flex% 
  6903. 1B%=nextlocation%:A%=A%+3
  6904. 3:nextlocation%+=A%
  6905. "Wimp_SlotSize",-1,-1 
  6906.  currentslot%
  6907.  currentslot%+&8000<nextlocation% 
  6908.  "Wimp_SlotSize",nextlocation%-&8000,-1 
  6909.  currentslot%
  6910.  currentslot%+&8000<nextlocation% A%=currentslot%+&8000-B%
  6911.  workspace%<0 
  6912.  B% A%
  6913. XB%=workspace%:workspace%+=A%+3
  6914.  workspace%>worklimit% 
  6915. 42,"Not enough workspace"
  6916. W1(c%)
  6917. W1(c%)=
  6918. #c%<<8 
  6919. #c%<<16 
  6920. #c%<<24
  6921. #c%<<8
  6922. beHW=
  6923. #c%<<8 
  6924. #c%<<24 
  6925. #c%<<16 
  6926. #c%<<8 
  6927. tiff(T%)
  6928.  1,7:=
  6929.  s$,t$:
  6930.  s$+=t$:t$=
  6931. 0:=s$
  6932.  bigendian 
  6933. #c%<<8 
  6934. #c%<<8
  6935.  4,9:
  6936.  bigendian 
  6937. W1(c%)
  6938.  6:=(
  6939. #c%<<24)>>24
  6940.  8:=(
  6941. tiff(3)<<16)>>16
  6942.  42,"Silly TIFF tag:"+
  6943. nextstrip
  6944. rowstogo%=striprows%
  6945. "stripptr+=1:
  6946. #c%=st%(stripptr)
  6947.  compression=5 
  6948. F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  6949. H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  6950.  compression=5 
  6951.  compression=32773 
  6952. .!incacheptr=datacache%:!numlefttogo=cache%
  6953. 12,4,c%,datacache%,cache%
  6954. watford(wtsx%,
  6955.  rep%,
  6956.  wt%,X%,c%)
  6957.  rlexpand%,wtsx%,rep%,wt%,X%
  6958.  C%>>6 
  6959.  0:?X%=C%:X%+=1:wt%=C%
  6960.  1:wt%-=1:rep%=C%
  6961.  rlexpand%,wtsx%,rep%,wt%,X%
  6962.  2:rep%=C%
  6963.  rlexpand%,wtsx%,rep%,wt%,X%
  6964.  3:wt%+=1:rep%=C%
  6965.  rlexpand%,wtsx%,rep%,wt%,X%
  6966.  X%=wtsx%
  6967. watfordcache(wtsx%,
  6968.  rep%,
  6969.  wt%,X%)
  6970.  rlexpand%,wtsx%,rep%,wt%,X%
  6971.  bytefromcache%:
  6972.  C%>>6 
  6973.  0:?X%=C%:X%+=1:wt%=C%
  6974.  1:wt%-=1:rep%=C%
  6975.  rlexpand%,wtsx%,rep%,wt%,X%
  6976.  2:rep%=C%
  6977.  rlexpand%,wtsx%,rep%,wt%,X%
  6978.  3:wt%+=1:rep%=C%
  6979.  rlexpand%,wtsx%,rep%,wt%,X%
  6980.  X%=wtsx%
  6981. reduce(
  6982.  C%,D%:C%=A%:D%=B%
  6983.  C%<D% 
  6984.  C%,D%
  6985. C%=C%
  6986.  C%=0
  6987. A%=A%
  6988.  D%:B%=B%
  6989. readpixelrow(z%())
  6990.  rows% 
  6991. rows%-=1:
  6992.  sx%=x% 
  6993. (r$+"(z%())")
  6994. 8AW%=
  6995. (r$+"(xp%())"):
  6996.  xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
  6997. z%()=0
  6998. sharppixelrow(z%())
  6999.  rows% 
  7000. rows%-=1:
  7001.  sx%=x% 
  7002.  sharpen% 
  7003. sharp(z%()) 
  7004. (r$+"(z%())"):
  7005.  equal% 
  7006. fit2(z%())
  7007.  sharpen% 
  7008. sharp(xp%()) 
  7009. (r$+"(xp%())"):
  7010.  equal% 
  7011. fit2(xp%())
  7012.  xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
  7013. z%()=0
  7014. sharp(z%())
  7015. K?yread%-=1:
  7016.  yread% W%=
  7017. (r$+"(rm%())"):
  7018.  equal% 
  7019. fit2(rm%())
  7020.  B%=0
  7021. col:rm%(0,B%)=rm%(1,B%):rm%(sx%+1,B%)=rm%(sx%,B%):
  7022.  sharp%,z%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals2%
  7023.  rm2%(),rm1%():rm1%()=rm%()
  7024. scaledpixelrow(z%())
  7025.  sy%=y% 
  7026. readpixelrow(z%())
  7027. T:ysamp%-=1:
  7028.  ysamp%=0 
  7029. readpixelrow(xl%()):ysamp%=ymul%
  7030.  ydiv%=1 
  7031. z%()=xl%()
  7032.  ysamp%>=ydiv% 
  7033. Y"ysamp%-=ydiv%:z%()=xl%()*ydiv%
  7034.  Y%:z%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  7035.  ysamp%=0 
  7036. readpixelrow(xl%()):ysamp%=ymul%
  7037.  ysamp%>Y% 
  7038. _4ysamp%-=Y%:xl2%()=xl%()*Y%:z%()=z%()+xl2%():Y%=0
  7039. a<Y%-=ysamp%:xl2%()=xl%()*ysamp%:z%()=z%()+xl2%():ysamp%=0
  7040.  Y%=0
  7041. ysamp%+=1
  7042. fit(z%())
  7043.  histequal%,z%(1,0),new%(0,0),x%
  7044. fit2(z%())
  7045.  histequal%,z%(1,0),new%(0,0),sx%
  7046. adjustpalette(mul,sub)
  7047.  mul=1 
  7048.  sub=0 
  7049.  C%=0
  7050. colourindex
  7051. rQr%(C%)=(r%(C%)-sub)*mul+1:g%(C%)=(g%(C%)-sub)*mul+1:b%(C%)=(b%(C%)-sub)*mul+1
  7052.  ham 
  7053.  C%=0
  7054. 4:ltable!C%=(ltable!C%-sub)*mul+1:
  7055.  input>400 
  7056.  C%=0
  7057. colourindex
  7058. yCrpal%(C%)=(rpal%(C%)-sub)*mul+1:gpal%(C%)=(gpal%(C%)-sub)*mul+1
  7059. zEbpal%(C%)=(bpal%(C%)-sub)*mul+1:table%(C%)=(table%(C%)-sub)*mul+1
  7060. cachesize(A%)
  7061. &20023,"ChangeFSI$Cache",A%,-1 
  7062.  Z<>0 
  7063. 35,"ChangeFSI$Cache",A%,20 
  7064. ,,Z:A%?Z=13:cache%=
  7065. $A%,"K")
  7066. $A%,"k") cache%=cache%*1024
  7067. cache%=128*1024
  7068. refill
  7069.  striprows%>0 
  7070. nextstrip
  7071. 12,4,c%,datacache%,cache%:rowstogo%=cacherows%:buff%=datacache%
  7072.  input=24
  7073. input=48 
  7074.  rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  7075. refillpcd
  7076.  pcdblk%!4>=sy% 
  7077.  pcdblk%!12>=sy% pcdblk%!12=sy%
  7078. "PhotoCD_GetBlock",pcdh%,,pcdblk%,datacache%,pcdindex%,,,pcdcache%,pcdcachesize%
  7079. Vrowstogo%=cacherows%:buff%=datacache%:pcdblk%!4+=cacherows%:pcdblk%!12+=cacherows%
  7080. 0rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  7081. 8(z%())
  7082.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%:buff%+=rowbytes%
  7083. &rowstogo%-=1:
  7084.  rowstogo%=0 
  7085. refill
  7086. 16(z%())
  7087.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
  7088. 7buff%+=rowbytes%:rowstogo%-=1:
  7089.  rowstogo%=0 
  7090. refill
  7091. 24(z%())
  7092.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7093. 0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
  7094. &rowstogo%-=1:
  7095.  rowstogo%=0 
  7096. refill
  7097. 300(z%())
  7098. 12,4,cc%,pbuff%,sx%:
  7099.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),pbuff%,buff%
  7100. 7buff%+=rowbytes%:rowstogo%-=1:
  7101.  rowstogo%=0 
  7102. refill
  7103. 400(z%())
  7104.  readline%,plbytes%,rep%,pix%,plbuff%
  7105.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7106. 500(z%())
  7107.  LZWdecode%,table%(0),c%,plbuff%,sx%
  7108.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7109. 800(z%())
  7110. watfordcache(wtsx%,rep%,wt%,plbuff%)
  7111.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7112. 801(z%())
  7113. watford(wtsx1%,rep1%,wt1%,buff%,c%)
  7114. watford(wtsx2%,rep2%,wt2%,wtsx1%,cc%)
  7115. watford(wtsx3%,rep3%,wt3%,wtsx2%,ccc%)
  7116.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7117. 901(z%())
  7118. 12,4,c%,rb%,sx%:
  7119. 12,4,cc%,gb%,sx%:
  7120. 12,4,ccc%,bb%,sx%
  7121.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7122. 902(z%())
  7123.  unpack%,buff%:
  7124.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7125. 7buff%+=rowbytes%:rowstogo%-=1:
  7126.  rowstogo%=0 
  7127. refill
  7128. 1000(z%())
  7129. AX%=buff%:
  7130.  rep%>0 C%=?pa%:
  7131.  rlexpand%,pasx%,rep%,C%,X%:pa%+=1
  7132.  rep2%>0 C%=?pa%:
  7133.  rlexpand%,pasx%,rep2%,C%,X%:pa%+=1
  7134.  C%=0 
  7135. Brep%=
  7136. #c%:C%=?pa%:
  7137.  rlexpand%,pasx%,rep%,C%,X%:
  7138.  rep%=0 pa%+=1
  7139. Vrep2%=C%
  7140. 15:rep%=C%>>4:
  7141.  rep% C%=?pa%:
  7142.  rlexpand%,pasx%,rep%,C%,X%:
  7143.  rep%=0 pa%+=1
  7144.  X%<pasx% 
  7145.  rep2% C%=?pa%:
  7146.  rlexpand%,pasx%,rep2%,C%,X%:
  7147.  rep2%=0 pa%+=1
  7148.  X%=pasx%
  7149.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7150. 1001(z%())
  7151. AX%=buff%:
  7152.  rep%>0 C%=?pa%:
  7153.  rlexpand%,pasx%,rep%,C%,X%:pa%+=1
  7154.  rep%=
  7155. #c%:C%=?pa%:
  7156.  rlexpand%,pasx%,rep%,C%,X%:
  7157.  rep%=0 pa%+=1
  7158.  X%=pasx%:
  7159.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7160. 1100(z%())
  7161.  readline%,plbytes%,rep%,pix%,plbuff%
  7162.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7163. 1400(z%())
  7164.  vrep% 
  7165. vrep%-=1
  7166. 9G%=buff%:
  7167.  X%=1
  7168. planes%:G%+=rowbytes%:F%=G%-rowbytes%
  7169.  C%=0 
  7170.  C%=0 
  7171. #c%:vrep%=
  7172. #c%-1
  7173. *D%=F%:
  7174. 12,4,c%,F%,patlen%:F%+=patlen%
  7175.  C%>1 
  7176.  N%=2
  7177.  E%=0
  7178. patlen%-1:F%?E%=D%?E%:
  7179. :F%+=patlen%:
  7180.  C%=128 
  7181. 12,4,c%,F%,C%:F%+=C%
  7182. >?F%=(C%
  7183. &80)<>0:
  7184.  E%=F%+1
  7185. F%+(C%
  7186. &7F):?E%=?F%:
  7187. :F%+=C%
  7188.  F%>=G%:
  7189.  plancnv%,rowbytes%,buff%,pbuff%
  7190.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7191. 1501(z%())
  7192.  readiff%,rowbytes%,plbuff%:rowstogo%-=1:
  7193.  rowstogo%=0 
  7194. nextstrip
  7195.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7196. 1505(z%())
  7197.  LZWdecode%,table%(0),c%,plbuff%,rowbytes%
  7198. )rowstogo%-=1:
  7199.  rowstogo%=0 
  7200. nextstrip
  7201.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7202. 1515(z%())
  7203.  LZWdecode%,table%(0),c%,plbuff%,rowbytes%
  7204. )rowstogo%-=1:
  7205.  rowstogo%=0 
  7206. nextstrip
  7207.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7208. 1600(z%())
  7209.  plancnv%,realrowbytes%,buff%,pbuff%:buff%+=rowbytes%
  7210.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7211. &rowstogo%-=1:
  7212.  rowstogo%=0 
  7213. refill
  7214. 1601(z%())
  7215.  X%=0
  7216. planes%-1:F%=plbuff%+X%*rowbytes%:
  7217.  readiff%,rowbytes%,F%:
  7218.  masking% 
  7219.  readiff%,rowbytes%,pbuff%
  7220.  plancnv%,rowbytes%,plbuff%,pbuff%
  7221.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7222. 1850(z%())
  7223.  readiff%,rowbytes%,plbuff%
  7224.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7225. 1851(z%())
  7226.  readiff%,rowbytes%,plbuff%
  7227.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7228. 1900(z%())
  7229.  readline%,plbytes%,rep%,pix%,plbuff%
  7230.  plancnv%,rowbytes%,plbuff%,pbuff%
  7231.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7232. 2000(z%())
  7233. X%=buff%:
  7234.  C%<128 
  7235.  C%+=1:
  7236. 12,4,c%,X%,C%:X%+=C%
  7237. 1F%=X%:?F%=
  7238.  C%=C%
  7239. -1:?X%=?F%:X%+=1:
  7240.  X%=buff%+rowbytes%
  7241.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7242. 2001(z%())
  7243. X%=buff%:
  7244.  C%<128 
  7245. &C%=(C%+1)*2:
  7246. 12,4,c%,X%,C%:X%+=C%
  7247. 7F%=X%:
  7248. 12,4,c%,X%,2:
  7249.  C%=C%
  7250. -1:!X%=!F%:X%+=2:
  7251.  X%=buff%+rowbytes%
  7252.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
  7253. 2002(z%())
  7254. X%=buff%:
  7255.  C%<128 
  7256. '+C%=(C%+1)*step24:
  7257. 12,4,c%,X%,C%:X%+=C%
  7258. )AF%=X%:
  7259. 12,4,c%,X%,step24:
  7260.  C%=C%
  7261. -1:!X%=!F%:X%+=step24:
  7262.  X%=buff%+rowbytes%
  7263.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7264. 2250(z%())
  7265.  mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
  7266. 07buff%+=rowbytes%:rowstogo%-=1:
  7267.  rowstogo%=0 
  7268. refill
  7269. 2300(z%())
  7270.  clrfirst% 
  7271.  X%=0
  7272. sx%-1:rb%?X%=?back%:gb%?X%=back%?1:bb%?X%=back%?2:
  7273.  vrep% 
  7274. vrep%-=1
  7275.  vrep%=-1:
  7276.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%:=
  7277. 9*E%=
  7278. #c%:D%=
  7279. &40 D%=
  7280.  1:E%=
  7281. :vrep%=D%-1:
  7282.  vrep%<0 vrep%=
  7283.  2:ccol%=back%?D%:cbuf%=rb%+sx%*D%:
  7284.  D%=255 cbuf%=alpha%
  7285.  X%=0
  7286. D%-1:cbuf%?X%=ccol%:
  7287. :cbuf%+=D%
  7288. 12,4,c%,cbuf%,D%+1:cbuf%+=D%+1:
  7289.  D%+1
  7290.  6:C%=
  7291.  X%=0
  7292. D%:cbuf%?X%=C%:
  7293. :cbuf%+=D%+1
  7294.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7295. 2401(z%())
  7296.  bm_rle8,rowbytes%,plbuff%
  7297.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7298. 2402(z%())
  7299.  bm_rle4,rowbytes%,plbuff%
  7300.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7301. 3000(z%())
  7302.  mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
  7303. O7buff%+=rowbytes%:rowstogo%-=1:
  7304.  rowstogo%=0 
  7305. refill
  7306. 3500(z%())
  7307. 3600(z%())
  7308.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7309. U0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
  7310. V)rowstogo%-=1:
  7311.  rowstogo%=0 
  7312. refillpcd
  7313. 3708(z%())
  7314. Y4A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
  7315. (jpeg%+4)
  7316.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%
  7317. 3724(z%())
  7318. ]HA%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
  7319. (jpeg%+4):gb%=rb%+1:bb%=rb%+2
  7320.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7321. rewind
  7322. rows%=sy%:
  7323.  flag 
  7324. #c%=st%
  7325.  100:
  7326. #c%=4
  7327.  200:
  7328. #c%=st%:rep%=0
  7329.  300:
  7330. #c%=st%:
  7331. #cc%=stcc%
  7332.  400:
  7333. #c%=st%:rep%=0
  7334.  500:
  7335.  I%=0
  7336. clearcode%-1:table%(I%)=I%:
  7337. #c%=st%
  7338. hF!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  7339. iH!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  7340.  501:buff%=datacache%
  7341.  600:
  7342. #c%=&380
  7343.  700:
  7344. #c%=st%
  7345.  800:
  7346. #c%=0:rep%=0:wt%=0
  7347.  801:
  7348. #c%=0:
  7349. #cc%=0:
  7350. #ccc%=0:rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
  7351.  900:
  7352. #c%=0
  7353.  901:
  7354. #c%=0:
  7355. #cc%=0:
  7356. #ccc%=0
  7357.  902:
  7358. #c%=st%
  7359.  1000:
  7360. #c%=st%:pa%=ctable%:rep%=0:rep2%=0
  7361.  1100:
  7362. #c%=st%:rep%=0
  7363.  1200:
  7364. #c%=1600
  7365.  1300:
  7366. #c%=0
  7367.  1301:
  7368. #c%=0:
  7369. #cc%=0:
  7370. #ccc%=0
  7371.  1400:
  7372. #c%=st%:vrep%=0
  7373.  1500:
  7374. #c%=st%(0):rowstogo%=striprows%:stripptr=0
  7375.  compression=5 
  7376. zF!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  7377. {H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  7378.  1600:
  7379. #c%=st%
  7380.  1700:
  7381. #c%=16
  7382.  1800,1850:
  7383. #c%=st%
  7384.  1900:
  7385. #c%=128:rep%=-1
  7386.  2000:
  7387. #c%=st%
  7388.  2100:
  7389. #c%=7
  7390.  2200:
  7391. #c%=st%
  7392.  2250:
  7393. #c%=st%
  7394.  2300:
  7395. #c%=st%:vrep%=0
  7396.  2400:
  7397. #c%=st%
  7398.  2500:
  7399. #c%=st%
  7400.  2600:
  7401. #c%=st%
  7402.  2700:
  7403. #c%=st%
  7404.  2800:
  7405. #c%=st%
  7406.  2900:
  7407. #c%=st%
  7408.  3000:
  7409. #c%=0
  7410.  3600:pcdblk%!4=0
  7411.  3700:jpegy%=sy%
  7412.  3900,3905:
  7413. #c%=st%
  7414.  cache% 
  7415.  flag=3600 
  7416. Epcdblk%!12=cacherows%:
  7417. refillpcd:
  7418.  cache%>=filesize% rowstogo%=-1
  7419.  cache%<filesize% 
  7420. 12,4,c%,datacache%,cache%:rowstogo%=cacherows%
  7421. buff%=datacache%
  7422.  cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
  7423.  input=24 
  7424. input=48 
  7425.  rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  7426.  flag=1500 
  7427.  compression=5 rowstogo%=striprows%
  7428. Assemble_Shell
  7429.  I%=0
  7430. P%=code%
  7431. [ OPT I%
  7432. .Shell_Call
  7433. MOV   R9,R0 
  7434. SMOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  7435. SWI   "OS_SetEnv"
  7436. STMFD R13!,{R0-R7, R12} 
  7437. -MOV   R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#0
  7438. SWI   "OS_Control"
  7439. STMFD R13!,{R0-R3}     
  7440. %MOV   R0,#&10:MOV R1,#0:MOV R2,#0
  7441. "SWI   "XOS_ChangeEnvironment" 
  7442. STMFD R13!,{R1,R2}     
  7443. LDR   R3,[R14,#28]     
  7444. LDR   R3,[R8,R3]       
  7445. STMFD R13!,{R3,R9,R14} 
  7446. SUB   R9,R13,#1024     
  7447. MOV   R5,R9
  7448. -ADR   R6,Shell_Job:ADR   R4,Shell_Job_End
  7449. .Shell_Copy
  7450. LDR   R2,[R6],#4       
  7451. STR   R2,[R5],#4
  7452. CMP   R6,R4
  7453. BCC   Shell_Copy
  7454. MOV   PC,R9            
  7455. .Shell_Job
  7456. LDR   R2,[R3,#-4]!     
  7457. STR   R2,[R9,#-4]!
  7458. CMP   R3,#&8000
  7459. BHI   Shell_Job
  7460. STMFD R13!,{R9}
  7461. ADR   R0,Shell_Exit
  7462. KMOV   R1,R9:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  7463. SWI   "OS_SetEnv"
  7464. ADR   R0,Shell_Error
  7465. ADR   R1,Shell_Buffer
  7466. MOV   R2,#0:MOV R3,#0
  7467. SWI   "OS_Control"
  7468. MOV   R0,#&10
  7469. ADR   R1,Shell_UpCall
  7470. MVN   R2,#0
  7471. "SWI   "XOS_ChangeEnvironment" 
  7472. STR   R13,Shell_Job_End
  7473. LDR   R0,[R13,#4*2]
  7474. ADD   R0,R0,R9
  7475. SUB   R0,R0,#&8000
  7476. SWI   "OS_CLI"
  7477. .Shell_Exit
  7478. MOV   r0, #0
  7479. .Shell_Common
  7480. STR   r0, Shell_ErrorWord
  7481. LDR   R13,Shell_Job_End
  7482. LDMFD R13!,{R8,R9,R10,R14}
  7483. LDMFD R13!,{R1-R2}
  7484. MOV   R0,#&10
  7485.  SWI   "OS_ChangeEnvironment"
  7486. LDMFD R13!,{R0-R3}
  7487. SWI   "OS_Control"
  7488. LDMFD R13!,{R0-R7, R12}
  7489. SWI   "OS_SetEnv"
  7490. MOV   R1,#&8000
  7491. .Shell_Restore
  7492. LDR   R2,[R8],#4
  7493. STR   R2,[R1],#4
  7494. CMP   R1,R9
  7495. BCC   Shell_Restore
  7496. LDR   R0,Shell_ErrorWord
  7497. CMP   R0,#0          
  7498. MSRNE CPSR_f,#1<<28  
  7499. .Shell_UpCall 
  7500. MOV   PC,R14
  7501. .Shell_Error
  7502. ADR   r0, Shell_Buffer + 4
  7503. B     Shell_Common
  7504. .Shell_Buffer 
  7505. EQUD 0
  7506. EQUD &12345678
  7507. EQUS 
  7508. EQUS 
  7509. .Shell_ErrorWord
  7510. EQUD 0
  7511. .Shell_Job_End
  7512. EQUD 0
  7513. A%=Shell_Job_End+4
  7514. subtask(a$)
  7515.  task% 
  7516. "Wimp_StartTask",a$
  7517.  code% 1024
  7518. Assemble_Shell
  7519. $A%=a$:
  7520.  Shell_Call
  7521. progjpg_next(c%)
  7522. #c%<>255 
  7523. #c%:=&100
  7524.  v%<>255
  7525. #c%:v%=256
  7526. progjpg_skip(c%)
  7527.  v%,w%:v%=
  7528. #c%:w%=
  7529. #c%:w%=(w%*256+
  7530. #c%=v%+w%
  7531. progjpg_needdjpeg(c%)
  7532.  sz%:
  7533. #c%=2
  7534. progjpg_next(c%)
  7535.  sz%=&C0 
  7536.  sz%>255:=
  7537.  sz%>&C0 
  7538. sz%<&D0 
  7539. sz%<>&C4 
  7540. sz%<>&CC 
  7541.  sz%>&E0 
  7542.  sz%<&F0 
  7543.  sz%>=&D0 
  7544.  sz%<&D8 
  7545.  sz%<>&D9 
  7546. progjpg_skip(c%)
  7547. getstring(ptr%)
  7548.  c%,p$
  7549.     p$=""
  7550.  (?ptr%>31 
  7551.  ?ptr%<256) 
  7552. (p$)<255
  7553.   c%=?ptr%
  7554.   p$+=
  7555.   ptr%+=1
  7556.